当前位置: 首页 > 知识库问答 >
问题:

使用lxml的Python脚本,xpath返回空列表

和光启
2023-03-14

我尝试使用xpath和lxml从html标记中提取href链接。但是xpath返回空列表,而它是单独测试的,并且似乎可以工作。

代码返回空值,而xpath似乎工作正常。

page = self.opener.open(link).read()
doc=html.fromstring(str(page))
ref = doc.xpath('//ul[@class="s-result-list s-col-1 s-col-ws-1 s-result-list-hgrid s-height-equalized s-list-view s-text-condensed s-item-container-height-auto"]/li/div/div[@class="a-fixed-left-grid"]/div/div[@class="a-fixed-left-grid-col a-col-left"]/div/div/a')
for post in ref:
    print(post.get("href"))

我使用一个代理服务器来访问链接,它似乎可以工作,因为“doc”变量正在填充html内容。我已经检查了这些链接,现在正处于获取此xpath的正确页面上。

这是我试图从中获取数据的链接:https://www.amazon.com/s/ref=lp_266162_nr_n_0?fst=as:off

共有2个答案

慕容修伟
2023-03-14

您的xpath选择器无效。尝试css选择器,如下所示

import requests
import lxml, lxml.html

url = 'https://www.amazon.com/s/ref=lp_266162_nr_n_0?fst=as%3Aoff&rh=n%3A283155%2Cn%3A%211000%2Cn%3A1%2Cn%3A173508%2Cn%3A266162%2Cn%3A3564986011&bbn=266162&ie=UTF8&qid=1550120216&rnid=266162'
r = requests.get(url)
html = lxml.html.fromstring(r.content)
links = html.cssselect('.a-fixed-left-grid-col .a-col-left a')
for link in links:
    print(link.attrib['href'])
https://www.amazon.com/Top-500-Instant-Pot-Recipes/dp/1730885209
https://www.amazon.com/Monthly-Budget-Planner-Organizer-Notebook/dp/1978202865
https://www.amazon.com/Edge-Order-Daniel-Libeskind/dp/045149735X
https://www.amazon.com/Man-Glass-House-Johnson-Architect/dp/0316126438
https://www.amazon.com/Versailles-Private-Invitation-Guillaume-Picon/dp/2080203371
https://www.amazon.com/Palm-Springs-Modernist-Tim-Street-Porter/dp/0847861872
https://www.amazon.com/Building-Chicago-Architectural-John-Zukowsky/dp/0847848701
https://www.amazon.com/Taverns-American-Revolution-Adrian-Covert/dp/160887785X
https://www.amazon.com/TRAVEL-MOSAIC-Color-Number-Relaxation/dp/1717562221
https://www.amazon.com/Understanding-Cemetery-Symbols-Historic-Graveyards/dp/1547047216
https://www.amazon.com/Soviet-Bus-Stops-Christopher-Herwig/dp/099319110X
https://www.amazon.com/Famous-Movie-Scenes-Dot-Dot/dp/1977747043
certifi==2018.11.29
chardet==3.0.4
cssselect==1.0.3
idna==2.8
lxml==4.3.1
requests==2.21.0
urllib3==1.24.1
邢法
2023-03-14

我想你在寻找书籍:艺术中的链接

import requests
from lxml.html import fromstring

link = 'https://www.amazon.com/s/ref=lp_266162_nr_n_0?fst=as%3Aoff&rh=n%3A283155%2Cn%3A%211000%2Cn%3A1%2Cn%3A173508%2Cn%3A266162%2Cn%3A3564986011&bbn=266162&ie=UTF8&qid=1550120216&rnid=266162'
r = requests.get(link,headers={"User-Agent":"Mozilla/5.0"})
htmlcontent = fromstring(r.text)
itemlinks = htmlcontent.xpath('//*[@id="mainResults"]//*[contains(@class,"s-access-detail-page")]')
for link in itemlinks:
    print(link.get('href'))

如果您想使用css选择器,那么以下操作应该可以:

'#mainResults .s-access-detail-page'

 类似资料:
  • 我试图使用xpath和lxml从html标签中抓取下一页的href链接。但是xpath返回空列表,而它是单独测试的,它似乎可以工作。 我尝试了css选择器和xpath,它们都返回空列表。 代码返回空值,而xpath似乎工作正常。 我在这里尝试了两种方法,但似乎都不起作用。 我正在使用一个代理服务器,用于访问链接,它似乎可以工作,因为“文档”变量正被HTML内容填充。我已经检查了链接,我在正确的页面

  • 如果我跑: 我会得到一张空名单。我猜它与名称空间有关,但我不知道如何修复它。

  • 我正在做一个项目,我试图让lxml从不同网页上的不同表格中提取股票数据。当我运行程序试图打印我试图提取的值时,我得到了空括号 以下是我称之为的方式: 以及: 我已经从XPath中删除了tbody,就像一些类似的问题所建议的那样。任何帮助或建议将不胜感激,谢谢!

  • 所以我有这个代码,它应该得到亚马逊上任何商品的价格。然而,我得到的不是价格,而是一个空清单。 这以前对我有用。我将感谢任何帮助。提前感谢。

  • 在上周之前,我使用Python的经验非常局限于我们网络上的大型数据库文件,突然间,我开始尝试从html表中提取信息。 经过大量阅读,我选择在Python2.7中使用lxml和xpath来检索相关数据。我使用以下代码检索了一个字段: 产生了以下清单: 我认识到CR/LF和制表符转义字符,我想知道如何避免它们?

  • 问题内容: 我正在尝试从网页中打印/保存特定元素的HTML。 我已经从萤火虫中检索了所请求元素的XPath。 我只希望将该元素保存到文件中。我似乎没有成功。 (尝试在XPath的结尾加上和不结尾) 我将不胜感激,或者有以往的经验。 10x,大卫 问题答案: 您的XPath显然太长了,为什么不试试较短的XPath看看它们是否匹配。一个问题可能是“ tbody”,浏览器会在DOM中自动创建“ tbod