python 解析网页数据的几种方法简介
2012-10-17 13:24
876 查看
工作中经常与数据打交道,去网上抓取数据也成了家常便饭。以前就准备抽空总结下的。
最近刚好看到 http://segmentfault.com/q/1010000000124036 上这篇文章有人问到了,
而且下面有热心pythoner 已经回答了,特此整理下,以备忘。
问题:现在要抓取一批页面,并将指定标签里面的数据抓取出来,如何做到通用性好,稳定可用?
1、使用第三方库:mechanize
输出为Apple
对于mechanize的详细使用,参考 http://my.oschina.net/leejun2005/blog/83451
2、使用第三方库: Beautiful
Soup 扩展包来解析
输出为Apple
对于Beautiful Soup的详细使用,参考 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start
3、使用第三方库: lxml扩展包来解析
4、直接使用正则来解析:
输出为Apple
有关python正则的使用请见《Python正则表达式操作指南》
http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
注:
以上几种方法中,推荐优先使用前 3 种,或者有其它优秀的第三方库你也可以尝试。
之所以不推荐最后的正则解析原因有2:
(1)HTML存在一些标签不规范的场景,如<p>,<BR>,
等可以单独出现,不用配对出现,
你可以简单的认为他的语法非常灵活,不像 xml 那样限制的很严格,之所以浏览器能解析是因为
浏览器背后做了许多不为人知的解析工作,如果你要用正则来做,你也需要考虑很多情况,
而且通用性也会大打折扣。这也是建议你选择第三方库的主要原因。
(2)直接用正则这么解析,在面对复杂的抓取的时候,正则的性能会是严重的瓶颈。
最近刚好看到 http://segmentfault.com/q/1010000000124036 上这篇文章有人问到了,
而且下面有热心pythoner 已经回答了,特此整理下,以备忘。
问题:现在要抓取一批页面,并将指定标签里面的数据抓取出来,如何做到通用性好,稳定可用?
1、使用第三方库:mechanize
01 | import mechanize |
02 | import cookielib |
03 | if __name__ = = '__main__' : |
04 | br = mechanize.Browser() |
05 | br.set_cookiejar(cookielib.LWPCookieJar()) # Cookie jar |
06 |
07 | br.set_handle_equiv( True ) # Browser Option |
08 | br.set_handle_gzip( True ) |
09 | br.set_handle_redirect( True ) |
10 | br.set_handle_referer( True ) |
11 | br.set_handle_robots( False ) |
12 |
13 | br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1 ) |
14 |
15 | br.addheaders = [( 'User-agent' , 'Mozilla/5.0 )] |
16 | br. open ( "http://apple.com" ) |
17 | br.title() |
对于mechanize的详细使用,参考 http://my.oschina.net/leejun2005/blog/83451
2、使用第三方库: Beautiful
Soup 扩展包来解析
1 | import urllib |
2 | from bs4 import BeautifulSoup |
3 | content = urllib.urlopen( 'http://www.apple.com/' ).read() |
4 | soup = BeautifulSoup(content) |
5 | soup.find( 'title' ).string |
对于Beautiful Soup的详细使用,参考 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start
3、使用第三方库: lxml扩展包来解析
1 | from lxml import html |
2 | doc = html.parse( 'http://www.apple.com/' ) |
3 | title = doc.find( './/title' ).text |
4 | title |
1 | import urllib |
2 | import re |
3 | url = 'http://apple.com' |
4 | html = urllib.urlopen(url).read() |
5 | m = re.findall(r "<title>(.*)</title>" , html) |
6 | m[ 0 ] |
有关python正则的使用请见《Python正则表达式操作指南》
http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
注:
以上几种方法中,推荐优先使用前 3 种,或者有其它优秀的第三方库你也可以尝试。
之所以不推荐最后的正则解析原因有2:
(1)HTML存在一些标签不规范的场景,如<p>,<BR>,
等可以单独出现,不用配对出现,
你可以简单的认为他的语法非常灵活,不像 xml 那样限制的很严格,之所以浏览器能解析是因为
浏览器背后做了许多不为人知的解析工作,如果你要用正则来做,你也需要考虑很多情况,
而且通用性也会大打折扣。这也是建议你选择第三方库的主要原因。
(2)直接用正则这么解析,在面对复杂的抓取的时候,正则的性能会是严重的瓶颈。
相关文章推荐
- Python读取本地文件并解析网页元素的方法
- 将网页解析成dom树的几种方法
- 用Python解析XML的几种常见方法的介绍
- Python pandas检查数据中是否有NaN的几种方法
- Python解析JSON数据的基本方法
- Python网络编程 4.2 IPv6简介与现代地址解析--getaddrinfo()方法的使用
- 简介Objective-C解析XML与JSON数据格式的方法
- Python 下载网页的几种方法
- 解析Json数据的几种方法
- JSP防止网页刷新重复提交数据的几种方法
- 02Python外部数据获取_解析网页
- python导入数据的几种方法
- 使用Python解析JSON数据的基本方法
- 详细解读Python中解析XML数据的方法
- 抓取网页数据的几种方法
- 使用Python解析JSON数据的基本方法
- [Python]使用shelve方法建立网页书签数据库
- python pandas 获取列数据的几种方法及书写形式比较
- 使用Python解析JSON数据的基本方法
- Python数据类型方法简介一————字符串