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个字母是'',但是不使用''怎么表达这个意思呢?

更新

有嵌套的&lt;div class='text'&gt;s,我想提取第一个&lt;div class='text'&gt;下面的所有&lt;p&gt;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>

我想在前两个&lt;p&gt; 中获取文本。我不能使用.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)

伪类:not() 的用途是啥? [复制]

:not 伪类是不是增加了选择器的特异性?

Python spider Scrapy 中间件 获取新闻