基于标签提取信息,效率相对会比正则RE快。因为HTML源码是由标签组成
常用语法:
标签[@属性 = '值']表示定位某一属性符合的标签
/ | 从上往下查找标签 | /html:从顶端查找html标签 /html/head:查找html标签下的head标签 |
---|---|---|
test() | 提取标签的文本信息 | /html/head/title/text():提取html标签下head标签下title标签下的文本信息 |
@ | 提取标签的属性信息 | li[@class='hidden-xs']:定位class属性为 'hidden-ex' 的 li 标签 |
// | 查找所有符合条件的标签 | //li[@class=’hidden-xs’]/a/@href:提取属性为hidden-ex的li标签,提取其中的a标签中的href属性 |
使用
- 调用response.xpath()可直接使用xpath表达式进行筛选,实战可看我的另一篇文章:ScrapyCrawl爬虫
- 先把读取下来的内容读取为etree对象,再调用xpath()筛选
etree:把网页源代码转为属性结构,每个标签作为树的结点
lxml:beautifulsoup的解析器,用于网页源码的解析
import urllib.request
from lxml import etree
data = urllib.request.urlopen("http://www.baidu.com").read()
html = etree.HTML(data) # 把读取的网页源码加载到etree类,实例化etree对象
title = html.xpath('/html/head/title/text()')