抓取网页并解析HTML
来源:互联网 发布:淘宝店铺招牌装修 编辑:程序博客网 时间:2024/05/21 22:24
http://www.lovelucy.info/python-crawl-pages.html
我觉得java太啰嗦,不够简洁。Python这个脚本语言开发起来速度很快,一个活生生的例子是因有关政策verycd开始自我阉割,有网友为了抢救资源,把整个verycd站爬了下来,镜像为SimpleCD.org。看了一下爬虫源代码,其实挺简单。使用方法:
import urllib2
content = urllib2.urlopen('http://XXXX').read()
这样可以得到整个html文档,关键的问题是我们可能需要从这个文档中获取我们需要的有用信息,而不是整个文档。这就需要解析充满了各种标签的html。
2. 解析html
SGMLParser
Python默认自带HTMLParser以及SGMLParser等等解析器,前者实在是太难用了,我就用SGMLParser写了一个示例程序:
import urllib2
from sgmllib import SGMLParser
class ListName(SGMLParser):
def __init__(self):
SGMLParser.__init__(self)
self.is_h4 = ""
self.name = []
def start_h4(self, attrs):
self.is_h4 = 1
def end_h4(self):
self.is_h4 = ""
def handle_data(self, text):
if self.is_h4 == 1:
self.name.append(text)
content = urllib2.urlopen('http://list.taobao.com/browse/cat-0.htm').read()
listname = ListName()
listname.feed(content)
for item in listname.name:
print item.decode('gbk').encode('utf8')
很简单,这里定义了一个叫做ListName的类,继承SGMLParser里面的方法。使用一个变量is_h4做标记判定html文件中的h4标签,如果遇到h4标签,则将标签内的内容加入到List变量name中。解释一下start_h4()和end_h4()函数,他们原型是SGMLParser中的
start_tagname(self, attrs)
end_tagname(self)
tagname就是标签名称,比如当遇到<pre>,就会调用start_pre,遇到</pre>,就会调用 end_pre。attrs为标签的参数,以[(attribute, value), (attribute, value), ...]的形式传回。
pyQuery
pyQuery是jQuery在python中的实现,能够以jQuery的语法来操作解析HTML文档,十分方便。使用前需要安装,easy_install pyquery即可,或者
sudoapt-getinstall python-pyquery
以下例子:
from pyquery import PyQuery as pyqdoc=pyq(url=r'http://list.taobao.com/browse/cat-0.htm')
cts=doc('.market-cat')
for i in cts:
print '====',pyq(i).find('h4').text() ,'===='
for j in pyq(i).find('.sub'):
print pyq(j).text() ,
print '\n'
BeautifulSoup
有个头痛的问题是,大部分的网页都没有完全遵照标准来写,各种莫名其妙的错误令人想要找出那个写网页的人痛打一顿。为了解决这个问题,我们可以选择著名的BeautifulSoup来解析html文档,它具有很好的容错能力。
BeautifulSoup功能强大,我还在研究中,有进展会更新本文。
- 抓取网页并解析HTML
- 抓取网页并解析HTML
- 抓取远程网页并解析HTML
- 抓取一个网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- Python写爬虫——抓取网页并解析HTML
- 抓取网页数据并解析
- Python 抓取并解析 HTML
- 抓取网页数据并解析Android
- 谈如何解析Html并抓取数据
- Python之HTML的解析(网页抓取一)
- 用XPATH解析网页并抓取要的内容
- 抓取html网页
- perl 网页抓取 网页解析
- 监控采集数据,整点定时器原理
- Android Compile
- vs2008的错误:Error: no data exchange control with ID 0x0409
- hdu 4350 Card 模拟
- sqlserver2008 1433端口关闭 Connection refused 解决
- 抓取网页并解析HTML
- VIM配置方法--手把手教你把Vim改装成一个IDE编程环境(图文)
- lucene使用教程1 --简介
- 组件关联关系的映射
- eval解析JSON中的注意点
- 使用easyUI给datagrid添加pagination
- 正在考虑怎么办
- 拦截器介绍
- Escape Time II(DFS搜索)