Python爬虫Xpath、CSS选择器 实用 | 高级技巧总结
程序员文章站
2022-04-07 14:26:08
HTML文本转DOM树的两种方式1、使用lxml.etreefrom lxml import etreehtml = etree.HTML(html_text)html.xpath("//div[@class='tabslider']/ul")2、使用scrapy团队开源的parsel库(推荐)Parsel官方文档from parsel import Selector# 构建DOM树html = Selector(text=html_text or xml_text)...
HTML文本转DOM树的两种方式
1、使用lxml.etree
from lxml import etree
html = etree.HTML(html_text)
html.xpath("//div[@class='tabslider']/ul")
2、使用scrapy团队开源的parsel库(推荐)
from parsel import Selector
# 构建DOM树
html = Selector(text=html_text or xml_text)
'''
解析结果的获取,只适用于parsel解析
'''
# 返回单个字符串
html.xpath("...").get()
html.xpath("...").extract_first()
# 返回结果列表
html.xpath("...").getall()
html.xpath("...").extract()
# 获取节点属性
html.xpath("...").attrib # 返回字典
html.xpath("...").attrib["href"] # 获取属性值
# 使用正则进行截取
html.xpath("...").re_first("\d+")
爬虫一般都是使用requests库获取网页源码,再使用xpath进行解析,有时候会遇到乱码问题,可以尝试如下方式:
res = requests.get(url, headers={...})
selector = Selector(text=res.content.decode("utf-8"))
注:
1、xpath解析默认是从 根节点 开始,加上 “.” 表示从 当前节点 开始
2、// 表示检索所有 子孙 节点, / 表示检索所有 子 节点
Xpath实用技巧(后续更新)
# 多个表达式, ele表示当前所选元素
ele.xpath("//ul//a/text() | //li/@class")
# 选择节点的特定子元素(不是子孙元素),child是xpath默认的轴
# 平时省略不写,知道有这东西存在就行了 >_<
ele.xpath("//ul/child::*")
ele.xpath("//ul/child::li")
# 使用position定位
ele.xpath('//li[@class="cxs" and postion()>1]')
# count统计节点的数量
ele.xpath("//ul[count(li)]")
# 获取节点及子孙节点所有本文
ele.xpath("//span//text()") # 返回列表
ele.xpath("string(//li[@class])") # 返回字符串
CSS选择器
获取 奇数 | 偶数 节点
# 奇数节点
ele.css("ul li:odd")
# 偶数节点
ele.css("ul li:even")
first-child和first-of-type区别
# div中的第一个子元素
div:first-child
# div中的第一个p元素
div p:first-of-type
关于tbody标签
在解析列表数据时间,在审查元素中发现 <tbody> 标签时
<table>
<tbody>
<tr>...</tr>
<tr>...</tr>
先别急着在xpath规则中加入tbody标签,先 Ctrl + U 检查网页源码中是否存在(我被坑了好几次,有时在有时不在 = = !)
言の葉
下面是我的个人公众号,刚毕业的一线互联网爬虫工程师,会经常在里面发布一些python和爬虫的小技巧,也会发布一些个人随笔,喜欢一个人思考,喜欢二次元,喜欢编程,喜欢冬夜里无人的村庄~
夜,迎风而立
为浩劫
为潜伏的凶手
铺下柔软的地毯
摆好一排排贝壳的杯盏-- 北岛《岛》
本文地址:https://blog.csdn.net/qq_40734108/article/details/109923770
下一篇: 浅谈用户体验的可视化