Python 抓取网页 (一)

来源:互联网 发布:js 设置radio被选中 编辑:程序博客网 时间:2024/04/30 11:33

       最近想抓取学校的主页新闻,然后通过服务器端发送给android平台手机.

    本程序设计思路,python抓取数据,利用thrift远程调用供android手机上的java程序使用.

     (1),抓取页面.

       python数据抓取方法很简单,urllib2的函数接口就可以使用,至于网络上说到的request请求,我还没有研究,这里就不讨论了.

        url = 'http://www.gucas.ac.cn/site/158'#暴露了自己的学校.#连接网络print "开始连接ucas新闻网"      #彻底暴露了.req = urllib2.Request(url)     #发送请求,这句其实可以不要的.webfile= urllib2.urlopen(req,timeout=10)   #这句是关键,远程连接url,设置最大连接时间.webcontext = webfile.read()  #网络字符串读入.注意文本格式是unicode

     注意:这里python执行上述要求必须是sudo执行.windows至于怎么执行,我还没有研究.

     (2),页面分析

        页面分析的方法总得来说两大类,一类是第三方的库,另一类是re模式匹配的方法.

其中第三方的库有BeautifulSoup和HTMLParser,两个库据说都很好用的.怎么抉择呢,抓取页面多条信息,可以用它们,很快.抓取特定的某一部分连接,匹配更快.

       说说re库吧.就是字符串匹配的方法.我只想找新闻的连接.一般网站开发人员,肯定会把新闻放在特定的url下.不然编程代码太多.

       废话不多说.来代码.

abst = re.compile(r'/site/158\?u=.*?\"',re.DOTALL).findall(webcontext)print len(abst)for i in range(0,len(abst)):web_path = 'http://www.gucas.ac.cn'+abst[i][:-1]print "启动线程 web:"+web_paththread.start_new_thread(getDetail,(web_path,))#处理每个网页的内部信息time.sleep(8)
 

       re的方法有很多,最要三个.search,match和compiler,前两个返回的是对象.后一个返回的是list.所以用for循环.至于匹配模式怎么写.(点我看匹配模式).得到的href多了一个",所以利用[]操作,去掉最后个字符.最后是启动线程处理每个url.至于内部网页信息怎么处理.这里其实还是重复同样的操作.就不在这里多写了.  


      读取文本信息遇到的问题,比如这一段

<P style="TEXT-INDENT: 2em"><FONT face=宋体>本报北京9月3日电(记者邱晨辉)今天,中国科学院大学(以下简称国科大)开学典礼在雁栖湖校区举行,这标志着建设10年的国科大雁栖湖校区正式启用。</FONT></P>
      这是匹配出来的信息,有的内容没有FONT这一行,多做一个判断?这样代码的就不优美了.还是考虑利用beatifulsoup进行呢?