Xpath最初用来处理XML解析,同样适用于HTML文档处理。相比正则表达式更方便一些
Xpath基本规则
1 | nodename 表示选取nodename 节点的所有子节点 |
下面举例使用下
1 | text = ''' |
result.decode(‘utf-8’) 可以补全缺失的html格式字符串
html.xpath(‘//*’)查找根节点下所有子孙节点
html.xpath(‘//a[@class=”preview”]’) 在根节点所有子孙节点中找到属性class为preview的a节点。
lxml同样可以读取文件
1 | from lxml import etree |
lxml 操作子节点
1 | from lxml import etree |
text 还是上面的字符串,这样可以取到bus节点下的所有子节点a
操作父节点
1 | from lxml import etree |
先找到class属性为preview的a节点,然后找到其父节点,接着筛选父节点的class属性,打印结果为[‘bus_vtem’]
属性匹配
上面已经写过了格式为: 节点名[@属性名=”属性值”]
属性获取
上面已经谢过了,格式为: 节点名/@属性名,注意这里没有[]
多属性值匹配
上面的节点bus 属性class 只有一个值bus_vtem,如果新增一个值mtest,那么属性匹配要更换为contains,不然会报错
1 | from lxml import etree |
多属性匹配
多属性匹配用于筛选一个节点时非常方便,各个属性的判断可以用 and or != == 等操作
1 | from lxml import etree |
文本获取
在节点后加/text()即可,如
result6 = html3.xpath(‘//*[contains(@class, “mtest”) and @name=”hurricane”]/text()’)
下面结合前边讲述的request,cookie,以及今天的lxml知识,实战爬取艾丝新发布的美女图片地址,代码如下
1 | import requests |
通过lxml分析,可以摘取资源地址
接下来爬取图片,读者可以发送request请求即可,留作课后题吧。
源码下载地址
https://github.com/secondtonone1/python-
谢谢关注我的公众号