如何遍历 xpath 中的所有项目



我是xpath和html的新手,所以我可能在这里错过了一些基本的东西。我有一个 html,我想在其中提取下面显示的所有项目。(我正在使用scrapy来执行我的请求,我只需要正确的xpath来获取数据(

在此处输入图像描述

在这里,我只想遍历所有这些项目,并从那里从每个项目内部获取一些数据。

for item in response.xpath("//ul[@class='feedArticleList XSText']/li[@class='item']"):
yield {'name': item.xpath("//div[@class='intro lhNormal']").get()}

问题是这个get只给了我所有循环的第一项。如果我改用 .getall((,那么我会获取每个循环的所有项目(在我看来这应该不起作用,因为我认为我在每次迭代中只选择一个项目(。提前感谢!

XPath 表达式中似乎缺少一个.(以"指示"您正在从上下文节点工作(。

取代:

yield {'name': item.xpath("//div[@class='intro lhNormal']").get()}

为:

yield {'name': item.xpath(".//div[@class='intro lhNormal']").get()}

你确实错过了 smth。默认情况下,Python没有xpath()函数。 你最好使用 bs4 或 lxml 库。 查看 lxml 的示例:

import lxml.html
import os 
doc = lxml.html.parse('http://www.websters-online-dictionary.org')
if doc:
table = []
trs = doc.xpath("/html/body/div[1]/div[1]/table[1]/tbody/tr")
for tr in islice(trs, 3):
for td in tr.xpath('td'):
table += td.xpath("/b/text() | /text()")
buffer = ''
for i in range(len(table)):
buffer += table[i]

完整的解释在这里。

最新更新