Python 抓取网页 (一)

       最近想抓取学校的主页新闻,然后通过服务器端发送给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_path
		thread.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进行呢?

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值