Python 网页抓取及相关: (1)获取源码及检索
来源:互联网 发布:知彼定位软件 编辑:程序博客网 时间:2024/05/18 01:26
前一段时间用Python做了不少和网页相关的事情,积累了少许经验,故整理下笔记。
1.基本的抓取网页源码的方法
import urllib2a = urllib2.urlopen("http://www.example.com")content = a.read()a.close()print content
需要指出的一点是,如果不使用close()释放连接的话,在多次调用这一模块时会导致urlopen挂掉,只能关掉终端重开才行。
这一点我之前一直没注意,结果便是写的一个自动刷新程序隔一段时间便需要重新启动一次,不然无法工作。
有些时候,某些网站为了防止爬虫程序等非浏览器方式给服务器造成压力,会检查headers。这个时候,就可以考虑自行构建headers来伪装自己了。
url = "http://www.example.com"obheaders = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36', 'DNT' : '1', 'Connection' : 'keep-alive', 'Cache-Control' : 'max-age=0', 'Accept-Language' : 'en-US,en:q=0.5', 'Accept-Encoding' : 'gzip,deflate,sdch', 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' }req = urllib2.Request(url, headers = obheaders)a = urllib2.urlopen(req)content = a.read()a.close()就实际使用而言,这个情况遇到的不多……一般情况下用系统默认的headers就能应付过去。
讲个小故事。
我前几天想抓取内部论坛的发贴数据时发现一个很烦心的问题,论坛用urlopen得到的数据和用firefox得到的数据不一样,urlopen得到的数据比ff得到的要旧很多。
这个问题折腾了我好久,最后在chrome的监视窗口中才意外发现,该论坛在未登录模式下服务器有缓存,而且缓存更新时间较长(保守估计有5分钟),应该是为了减轻服务器压力而设定的。
虽然用python实现论坛模拟登录也不麻烦(后续再整理),但是抓数据这事总是感觉不要和账号扯上关系比较好,于是做罢。
2.网页内容检索
使用上面的代码print出来的是网页的源码,而一般情况下我们感兴趣的是网页中的很少一部分内容,于是接下来的工作便是从这一大堆代码里检索出我们想要的内容。
我们一般使用re模块来实现内容的匹配,常用search()或findall(),以search()为例
import ret = re.search('<title>[\w\W]+?)<\/title>',content) try: print t.group(1)except Exception,e: print "fail to find title"content为之前获取到的网页源代码,本例中进行检索的是网页的标题。
search()和findall()都使用正则表达式来进行匹配,正则表达式的内容可参考http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
对于大部分动态网站,其具体页面大都是使用模板生成,于是在检索信息时多多研究下HTML标记如<h3>..</h3>以及CSS标签等,检索的效率可适当提高。
- Python 网页抓取及相关: (1)获取源码及检索
- Python+Requests安装及抓取网页源码中文乱码问题的解决
- Python简单抓取新浪某网页新闻链接及标题
- scrapy:python下的网页抓取及解析框架
- 6.Hibernate检索及抓取策略
- Python获取网页源码
- 使用wget工具抓取网页和图片 及 相关工具几个
- httpClient及jsoup抓取解析网页数据
- 数据库自定义字段及相关检索
- Scrapy 抓取数据及相关软件(Ubuntu)
- Hashing图像检索源码及数据库总结
- 图像检索:Hashing图像检索源码及数据库总结
- python 爬虫及相关
- Android获取手机联系人及检索
- 抓取网页相关方法
- Android根据网址获取网页源码并抓取相应字段
- MFC-抓取网页源码
- 获取屏幕分辨率及网页信息
- leetcode_question_111 Minimum Depth of Binary Tree
- 通过网页实现软件的布局
- HDU4720----Naive and Silly Muggles
- memcached的分布式算法
- Java数组常用的十个方法
- Python 网页抓取及相关: (1)获取源码及检索
- 青春,请不要毕业
- 关于c#中的Timer控件的简单用法
- C++中认识的第一个函数获取数组的大小
- 石头剪刀布游戏
- 面向对象的3个基本要素和5个基本设计原则(整理)
- 冯诺依曼体系结构
- 2013-9-21 任务
- 第一次骑自行车