Python Scrapy 无法获取伪类“:not()”
Posted
技术标签:
【中文标题】Python Scrapy 无法获取伪类“:not()”【英文标题】:Python Scrapy can't get pseudo class ":not()" 【发布时间】:2016-11-06 01:59:25 【问题描述】:可以写
content.css('.text>p::text').extract()
但是
content.css('.text:not(.text .text)>p::text').extract()
不会工作。 它告诉我:
SelectorSyntaxError: Expected ')', got <S ' ' at 15>
是的,'.text:not(.text .text)>p::text'中的第15个字母是'',但是不使用''怎么表达这个意思呢?
更新
有嵌套的<div class='text'>
s,我想提取第一个<div class='text'>
下面的所有<p>
s。
例如:
<div class='text comment'>
<strong>abc</strong>
<span>def</span>
<p>xxxxxxxxxxxxx</p>
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
<div class='text sub_comment'>
<strong>lst</strong>
<span>lll</span>
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
<p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>
</div>
</div>
我想在前两个<p>
中获取文本。我不能使用.comment
和.sub_comment
来区分它们,因为它们会因情况而异,并且在外部不一定是comment
,在内部标签中不一定是sub_comment
。
【问题讨论】:
你的问题对我来说似乎不清楚,你能给出你试图与这个选择器匹配的使用示例标记吗? @PawelMiech 我更新了这个问题。我使用 xpath 解决了这个问题。你认为有 css 解决方案吗? 【参考方案1】:试试nth-child(1)怎么样?
所以你的 css 将是:
".text:nth-child(1)>p"
在 Scrapy 中:
In [54]: from scrapy import Selector
In [55]: a
Out[55]: u"<div><div class='text comment'> <strong>abc</strong> <span>def</span> <p>xxxxxxxxxxxxx</p> <p>xxxxxxxxxxxxxxxxxxxxxxxxxxx</p> <div class='text sub_comment'> <strong>lst</strong> <span>lll</span> <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> </div></div></div>"
In [56]: sel = Selector(text=a)
In [57]: sel.css(".text:nth-child(1)>p::text").extract()
Out[57]: [u'xxxxxxxxxxxxx', u'xxxxxxxxxxxxxxxxxxxxxxxxxxx']
this tutorial here 中有很好的 nth-child 解释和演示(向下滚动到第 22 段)。
【讨论】:
以上是关于Python Scrapy 无法获取伪类“:not()”的主要内容,如果未能解决你的问题,请参考以下文章
bash: scrapy: command not found
python框架Scrapy报错TypeError: 'float' object is not iterable解决
96python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)