选择包含具有特定类的div的元素的文本

时间:2020-04-08 14:27:27

标签: html css scrapy

我正在使用scrapy CSS选择器提取以下html并将其加载到项目加载器中。

如何提取td的文本,其中此td包含类div的{​​{1}}

即我要提取文本sweetness

HTML代码:

Dry

在草率的<tr> <td> <div class="grape"> </div> Cabernet Sauvignon </td> <td> <div class="sweetness"> </div> Dry </td> </tr> 中,我定义了一个字段ItemLoader,但是我不确定对此的css select查询是什么。

PYTHON代码:

sweetness

2 个答案:

答案 0 :(得分:0)

请参阅下文-

loader = ItemLoader(item=wine_item, response=response)
loader.add_xpath('div_content', '//td/div[@class="sweetness"]')
loader.load_item()

答案 1 :(得分:0)

我已经在这个问题上苦苦挣扎了很长时间,并且意识到css不支持选择父节点parent selector in css

幸运的是,xpath选择器比CSS选择器更强大! lxml软件包在scrapy中得到了它的支持,其中xpath实际上是一流的,并且是css的超集,而css只是对其的扩展(实际上是一个单独的软件包和所有css selectors are translated to xpath)。

所以回到您的问题,只需使用父路径从您的div.sweetness到父节点td

...
loader.add_xpath('sweetness', '//div[@id="answer-13134778"]/parent::*')
...

或速记

....
loader.add_xpath('sweetness', '//div[@id="answer-13134778"]/..')
````

应该做到!