python爬去网页数据时,如果使用requests库和xpath,首先需要使用lxml的etree将获取的网页数据完整,因为有时候使用requests.get(url ,headers=headers)获取到的数据不完整。etree模块就可以自动修复html文本。
安装lxml:
lxml是python的一个解析库,支持html和xml的解析,同时也支持xpath解析方式。
pip install lxml
etree模块的使用
from lxml import etree
对网页HTML的解析,使用etree.HTML(html.content)
接下来就可以使用xpath抓取对应的需求节点的信息了。
xpath的语法
选取节点:
/: 表示选取直接子节点
<html><body><div></div></body></html>
xpath: /div
result: null
season: /div表示获取根节点下的div但是,根节点下只有<html> 这一个子节点,/是不能获取到子孙节点的
//: 表示获取任意节点
谓语:
通过列子来说明
//book/div[1]
explanation: 获取book节点下的第一个div节点
注意: xpath语法的下标是从数字1开始的,这里和python的语法是有区别的
//book/div[last()]
explanation: 获取book节点的最后一个div节点
//book/div[positon()<3]
explanation: 获取book节点下的前两个div节点
//book/div[@price=1]
explanation: 获取book节点下属性price=1 的div节点
//book/div[contains(@class,"f")]
explanation: 获取book节点下class属性中包含f的div节点
通配符:
: 表示获取任意的节点
@:表示任意属性
多个路径:
| : //book[@price=1] | //book[@price=2] 表示获取属性price=1或者price=2的book节点
逻辑运算符:
< ,> , <= ,>= , !=, and , or
网友评论