无法在 xpath 中获取文本(lxml/python)

Posted

技术标签:

【中文标题】无法在 xpath 中获取文本(lxml/python)【英文标题】:cannot get text in xpath (lxml/ python) 【发布时间】:2022-01-23 23:26:14 【问题描述】:

我假设在网站上获取所有教授的“电子邮件”的正确路径,但输出列表是[],这意味着路径中没有任何内容?真的不知道为什么:(

import requests
from lxml import etree
headers = "User-Agent":""
res = requests.get("https://www.csie.ntu.edu.tw/members/teacher.php?mclass1=110",headers=headers)
content = res.content.decode()
html = etree.HTML(content)

email = html.xpath('//li[@class="mail"]/a/text')
for e in email:
    print(e)

非常感谢您的帮助。非常感谢社区。​​p>

【问题讨论】:

【参考方案1】:

我花了一些时间调查问题并最终找到它。如果您查看下载的 html,您会发现根本没有电子邮件!取而代之的是一堆js脚本

var l=new Array();
    l[0]='>';l[1]='a';l[2]='/';l[3]='<';l[4]='|119';l[5]='|116';l[6]='|46';l[7]='|117';l[8]='|100';l[9]='|101';l[10]='|46';l[11]='|117';l[12]='|116';l[13]='|110';l[14]='|46';l[15]='|101';l[16]='|105';l[17]='|115';l[18]='|99';l[19]='|64';l[20]='|104';l[21]='|115';l[22]='|103';l[23]='|110';l[24]='|117';l[25]='|104';l[26]='>';l[27]='"';l[28]='|119';l[29]='|116';l[30]='|46';l[31]='|117';l[32]='|100';l[33]='|101';l[34]='|46';l[35]='|117';l[36]='|116';l[37]='|110';l[38]='|46';l[39]='|101';l[40]='|105';l[41]='|115';l[42]='|99';l[43]='|64';l[44]='|104';l[45]='|115';l[46]='|103';l[47]='|110';l[48]='|117';l[49]='|104';l[50]=':';l[51]='o';l[52]='t';l[53]='l';l[54]='i';l[55]='a';l[56]='m';l[57]='"';l[58]='=';l[59]='f';l[60]='e';l[61]='r';l[62]='h';l[63]=' ';l[64]='a';l[65]='<';
    for (var i = l.length-1; i >= 0; i=i-1)
    if (l[i].substring(0, 1) == '|') document.write("&#"+decodeURIComponent(l[i].substring(1))+";");
    else document.write(decodeURIComponent(l[i]));

如果您在浏览器的控制台中键入它(如果元素以“|”开头,它会打印它的 ascii 代码,如果不是,它会打印元素本身。它是从最后开始的)您可以看到它将电子邮件添加到文档。我的猜测是这样做是为了使该电子邮件无法被谷歌搜索并且难以抓取。

所以你需要做的是评估 html 中的脚本,然后搜索电子邮件。 This 主题看起来正是您所需要的

【讨论】:

如果您坚持评估该脚本并将尝试准备工作的 sn-p,请告诉我。 非常感谢您的帮助!我不熟悉js所以不知道这个约束:(

以上是关于无法在 xpath 中获取文本(lxml/python)的主要内容,如果未能解决你的问题,请参考以下文章

在 XPath 中获取(文本)

在 Selenium 测试中使用 XPath 通过文本获取 WebElement

使用 XPath 在使用 python 的 <td> 单元格中获取文本

selumium 中 xpath获取文本属性正确写法

如果它是使用 XPath 在 Scrapy 中的其他节点的父节点,如何从子节点获取文本

使用 Xpath (HtmlXPathSelector) 获取父子文本