是否有任何Python库可帮助获取与给定正则表达式匹配的dom节点的xpath?
我正在尝试从常见问题页面中获取问答对
这是来自site
的三个不同的问题xpathxpath1: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[7]/div[1]/a/span
xpath2: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[1]/div/div[10]/div[1]/a/span
xpath3: /html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/div[3]/div[1]/div[1]/div[1]/a/span
现在让正则表达式变成这样:
/html/body/div[1]/div[2]/div[3]/div[2]/div/div[2]/div/ * / * / * /div[1]/a/span
是否有可能通过python中的某个库获取所有满足我们构建的正则表达式的xpath?
我尝试使用scrapy选择器来获取所有问题,但是在获取答案时却失败了,所以我想遍历所有问题然后获取他们的答案,为此,我想要问题Xpaths
答案 0 :(得分:2)
您不需要工具或正则表达式(以及绝对XPath表达式)。尝试使用以下XPath来匹配页面上的所有问题:
//div[@class="ClsInnerDrop"]/a
如果您不知道如何编写自己的选择器,请选中此cheatsheet
答案 1 :(得分:0)
最后,我找到了结合lxml和scrapy的解决方案。 使用@Andersson答案使用选择器查找所有文本内容,然后针对每个文本遍历树,并使用lxml中的 tree.getpath()
该解决方案不是基于正则表达式的,而是解决了我的用例,因此将其发布
import requests
from lxml import html
def get_xpath_for_text(tree, text):
try:
for tag in tree.iter():
if tag.text and tag.text == text:
return tree.getpath(tag)
return ' '
except Exception as e:
return ' '
webpage = requests.get(url)
html_content = html.fromstring(webpage.text)
tree= html_content.getroottree()
get_xpath_for_text(tree, text)