首页 > 解决方案 > 无法在scrapy中使用css选择器抓取下一个兄弟

问题描述

我正在尝试使用在其中实现 css 选择器的scrapy来获取预算。我可以在使用 xpath 时得到它,但如果是 css 选择器,我会迷路。当我去 BeautifulSoup 并使用next_sibling.

我试过:

import requests
from scrapy import Selector

url = "https://www.imdb.com/title/tt0111161/"

res = requests.get(url)
sel = Selector(res)
# budget = sel.xpath("//h4[contains(.,'Budget:')]/following::text()").get()
# print(budget)

budget = sel.css("h4:contains('Budget:')::text").get()
print(budget)

我使用 css 选择器得到的输出:

Budget:

预期输出:

$25,000,000

html的相关部分:

<div class="txt-block">
            <h4 class="inline">Budget:</h4>$25,000,000
            <span class="attribute">(estimated)</span>
        </div>

网站地址

该站点中的该部分显示为: 在此处输入图像描述

在scrapy中使用css选择器时如何获取预算信息?

标签: pythonpython-3.xweb-scrapingscrapycss-selectors

解决方案


这个选择器.css("h4:contains('Budget:')::text")正在选择h4标签,你想要的文本在它的父div元素中。

您可以使用.css('div.txt-block::text'),但这会返回几个元素,因为页面有几个这样的元素。CSS 选择器没有父伪元素,我想你可以使用.css('div.txt-block:nth-child(12)::text'),但如果你要抓取更多页面,这可能会在其他页面中失败。

最好的选择是使用 XPath:

response.xpath('//h4[text() = "Budget:"]/parent::div/text()').getall()

推荐阅读