在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,有时候用正则无法匹配或很难准确匹配,可以lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行匹配。
首先,我们需要安装一个支持xpath的python库。目前在libxml2的网站上被推荐的python binding是lxml,也有beautifulsoup,不嫌麻烦的话还可以自己用正则表达式去构建,本文以lxml为例讲解。
直接使用lxml处理:
------------------------------------------------------------------------------------------------------
# basics.py
# -*- coding:utf-8 -*-
import urllib2
import urllib
import sys
from lxml import etree
reload(sys)
sys.setdefaultencoding("utf-8")
def basics_xpath(url, str_xpath):
# 定义headers
head = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
try:
# 构建请求的request
request = urllib2.Request(url, headers=head)
# 利用urlopen获取页面代码
response = urllib2.urlopen(request)
# 将页面保存并转化为UTF-8编码
pageCode = response.read().decode('utf-8')
# print pageCode
except urllib2.URLError, e:
if hasattr(e, "reason"):
print u"连接失败,错误原因", e.reason
return None
# 使用etree对html解析
tree = etree.HTML(pageCode)
# 使用xpath对网页内容进行筛选
items = tree.xpath(str_xpath)
# for item in items:
# print item
return list(items)
----------------------------------------------------------------------------------
#perform.py
import basics
def page_data():
# 定义目标网址
url="www.baidu.com"
# 定位xpath规则
str_xpath = ""
pg_data=basics.basics_xpath(url, str_xpath )
for item in pg_data:
print item.text
if __name__ == '__main__':
page_data()