欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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库(推荐)

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和爬虫的小技巧,也会发布一些个人随笔,喜欢一个人思考,喜欢二次元,喜欢编程,喜欢冬夜里无人的村庄~

Python爬虫Xpath、CSS选择器 实用 | 高级技巧总结

夜,迎风而立 
为浩劫 
为潜伏的凶手 
铺下柔软的地毯 
摆好一排排贝壳的杯盏  

                        --  北岛《岛》

 

 

本文地址:https://blog.csdn.net/qq_40734108/article/details/109923770