• 周一. 5月 27th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

python爬虫笔记(2-1)Xpath解析

admin

11月 28, 2021
Xpath是在XML文档中搜索内容的一门语言,可以通过属性或节点路径来查找内容
Xpath选择器教程及参考手册:https://www.w3school.com.cn/xpath/index.asp
 
1、安装:
pip install lxml
 
2、导入:
etree中包含了xpath功能,要导入etree
from lxml import etree
 
3、语法:
/:  表示层级关系,第一个/表示根节点
./:  表示相对路径
//:  搜索后代,如”/div/content/name//nick/text()” # 取name中所有nick中的文本
*:  通配符:如”/div/content/*/nick/text()” # 取content中所有nick中的文本(nick的父节点可以是name也可以是其它的)
text():提取文本
 
4、例子:
from lxml import etree
tree = etree.HTML(“a.html”)
 
# 拿到a标签的内容
result = tree.xpath(“/html/body/ul/li/a/text()”)
 
# 拿到第1个li中a标签的内容
result = tree.xpath(“/html/body/ul/li[1]/a/text()”)
 
# 拿到第a标签中属性href的值为dapao的内容,[@xxx=’xxx’]是属性的筛选
result = tree.xpath(“/html/body/ul/li/a[@href = ‘dapao’]/text()”)
 
# 拿到第a标签中属性href的值,@属性:拿到属性值
result = tree.xpath(“/html/body/ul/li/a/@href”)
 
# 相对路径查找 ./ (或者说是在某个元素内部使用xpath查找)
li_list = tree.xpath(“/html/body/ul/li”)
for li in li_list:
  result = li.xpath(“./a/text()”)     # ./表示相对查找,在li中继续查找
 
# 找到网页中所有的div(等于CSS选择器中直接写div)
//div
 
# 找到网页中所有div里所有的p标签(等于CSS选择器中的div p)
//div//p
 
# 找到网页中所有div里的直接子节点p(等于CSS选择器中的div > p)
//div/p
 
# 通配符*的使用   
:选择属性id为111的元素(不管元素的标签名是什么,只要属性id=111)
//*[@id=’111′]
:选择具有id属性的所有页面元素
//*[@id]
:div中任何类型的第2个元素
//div/*[2]
 
# 选择属性值包含某个字符串的元素,例:选择href属性值包含baidu
//*[contains(@href,’baidu’)]
 
# 选择属性值以某个字符串开头的元素,例:href属性以http开头
//*[starts-with(@href,’http’)]
 
# 选择属性值以某个字符串结尾的元素,例:href属性以cn结尾
//*[ends-with(@href,’cn’)]
 
# 范围选择:正数用position()函数;倒数时position()和last()配合使用,last()表示最后一个元素
:选择option类型第1到2个子元素
//option[position()<3]
:选择class属性为red的前3个子元素
//*[@class=’red’]/*[position()<4]
:选择class属性为red的后3个子元素
//*[@class=’red’]/*[position()>=last()-2]
 
# 组选择,如,两种条件满足其一即可,两条件之间用 | 关联
:选择所有id=111或class=t的元素(等于CSS选择器中的 #1,.t)
//*[@id=’111′] | //*[@class=’t’] 
 
# 选择父节点  /..
:选择id=111的父节点
//*[@id=’111′]/..
 
# 选择兄弟节点  前面的兄弟节点:preceding-sibling::   后续兄弟节点:following-sibling::   
:选择id=111的元素的所有前面的兄弟节点
//*[@id=’111′]/preceding-sibling::*
:选择id=111的元素的所有后续的兄弟节点(等于CSS选择器中的 ~)
//*[@id=’111′]/following-sibling:: *
 
 
 
 
 
 

《python爬虫笔记(2-1)Xpath解析》有2个想法
  1. Hi there! Do you know if they make any plugins to assist with Search
    Engine Optimization? I’m trying to get my site to rank for some targeted keywords but I’m not seeing very good gains.
    If you know of any please share. Many thanks! You can read similar blog here:
    Scrapebox List

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注