python - 无法在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选择器时如何获取预算信息?
解决方案
这个选择器.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()
推荐阅读
- java - 读取 csv 文件但带有空字符串 []
- json - 如何在 Angular 5 中为数据表实现数据源
- angular - Interceptor.intercept 不是函数
- macos-high-sierra - 更新 Xcode 的尝试以无休止的等待结束
- webpack - Webpack 4 模块解析失败:意外字符“@”(1:0)
- html - 切换时,Bootstrap 4 折叠会扩展 div 宽度
- python-3.x - 将继承 str 和 __new__ 的类从 py 2 迁移到 2/3
- ubuntu - RIDE 运行插件不起作用
- firebase - AngularFire/Firestore 使用最大退避延迟来防止后端过载
- python - 将 Word2Vec 二进制模型从 S3 加载到 Gensim 失败