xpath定位元素返回列表为空

在爬取一些网站的时候,结合from lxml import etree库中etree.HTML()可以构造一个符合xpath语法的html文本,为了方便,我们可以F12-copy xpath获取该元素在网页中的xpath语法,但是其复制的为绝对路径,在某些时候是无法定位出元素的。

HTML(text, parser = None, base_url = None)
从字符串常量解析HTML文档。返回根节点(或解析器目标返回的结果)。此函数可用于在Python代码中嵌入“ HTML文字”。
https://lxml.de/api/lxml.etree-module.html#HTML

以爬取研招网院校库(https://yz.chsi.com.cn/sch/)为例子
1:使用copy xpath方法
在这里插入图片描述
这是xpath(绝对路径):

 /html/body/div[2]/div[3]/div[3]/table/tbody/tr[1]/td[1]/a/text()
import requests
from lxml import etree

url='https://yz.chsi.com.cn/sch/'
res=requests.get(url).text
if len(res)>100:#是否解析出text
    print('解析成功')
dom=etree.HTML(res)
text=dom.xpath('/html/body/div[2]/div[3]/div[3]/table/tbody/tr[1]/td[1]/a/text()')
print(text)

在这里插入图片描述
是一个空列表,但在xpath helper中可以解析出北京大学,说明xpath是对的。

2:使用相对路径:
在这里插入图片描述
xpath语法[需要手写]:

//*[@class="yxk-table"]/table/tbody/tr[1]/td[1]/a/text()
import requests
from lxml import etree

url='https://yz.chsi.com.cn/sch/'
res=requests.get(url).text
if len(res)>100:#是否解析出text
    print('解析成功')
dom=etree.HTML(res)
text=dom.xpath('//*[@class="yxk-table"]/table/tbody/tr[1]/td[1]/a/text()')
print(text)

在这里插入图片描述
使用相对路径时候则可以解析出文本

发布了71 篇原创文章 · 获赞 204 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44198436/article/details/104077558
今日推荐