gpt4 book ai didi

python - XPath 返回空列表。为什么它忽略目标 div 元素?

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:01 25 4
gpt4 key购买 nike

我是 XPath 和 Scrapy 的新手。我试图定位一个没有唯一类的节点(即 class="pubBody")。

已经尝试过: xpath not contains A and B

这应该是一个简单的任务,但 XPath 只是错过了第二项。我正在从 scrapy shell 中执行此操作。在命令提示符下:

scrapy shell“http://www.sciencedirect.com/science/journal/00221694/

我正在寻找第二个div:

<div id="issueListHeader" class="pubBody">...< /div>

<div class="pubBody">... < /div>

我只能得到第一个,但不能得到第二个。类似问题的最佳答案建议尝试以下内容:

hxs.xpath('//div[contains(@class,"pubBody") and not(contains(@id,"issueListHeader"))]') 

但是由于某种原因这会返回一个空列表。有什么帮助吗?一定是错过了一些愚蠢的东西,我已经尝试了好几天了!

其他详细信息:

进入 scrapy shell 后:

import scrapy

xs = scrapy.Selector(response)

hxs.xpath('//div[@class="pubBody"]')

仅适用于第一个 div 元素:

[<Selector xpath='//div[@class="pubBody"]' data='<div id="issueListHeader" class="pubBody'>]

对于失败的第二个 div 元素,我也尝试过:

hxs.xpath('//div[@class="pubBody" and not(@id="issueListHeader")]').extract_first()

hxs.xpath('//div[starts-with(@class, "pubBody") and not(re:test(@id, "issueListHeader"))]')

也直接从 Chrome 复制 XPath,但也返回 '[]':

hxs.xpath('//*[@id="issueList"]/div/form/div[2]')

最佳答案

问题在于,此页面上的 HTML 格式远远不够。为了进行演示,请查看相同的 CSS 选择器如何使用 Scrapy 生成 0 个结果,并在 BeautifulSoup 中生成 94 个结果。 :

In [1]: from bs4 import BeautifulSoup

In [2]: soup = BeautifulSoup(response.body, 'html5lib') # note: "html5lib" has to be installed

In [3]: len(soup.select(".article h4 a"))
Out[3]: 94

In [4]: len(response.css(".article h4 a"))
Out[4]: 0

您尝试查找的 pubBody 元素也是如此:

In [6]: len(response.css(".pubBody"))
Out[6]: 1

In [7]: len(soup.select(".pubBody"))
Out[7]: 2

因此,尝试连接 BeautifulSoup 来修复/清理 HTML - 最好通过 middleware .

<小时/>

我创建了一个简单的scrapy_beautifulsoup middleware轻松连接到项目:

  • 通过 pip 安装:

    pip install scrapy-beautifulsoup
  • settings.py中配置中间件:

    DOWNLOADER_MIDDLEWARES = {
    'scrapy_beautifulsoup.middleware.BeautifulSoupMiddleware': 543
    }
    BEAUTIFULSOUP_PARSER = "html5lib"

利润。

关于python - XPath 返回空列表。为什么它忽略目标 div 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com