【问题标题】:Python Scrapy, include text, exclude text using xpathPython Scrapy,包含文本,使用 xpath 排除文本
【发布时间】:2016-01-25 11:41:31
【问题描述】:

所以我目前正在使用 Scrapy 并想抓取一个网站以获取特定信息。我希望只能在存在某些文本的情况下抓取信息,但也只能在不存在某些文本的情况下抓取信息。

例如,我可能会查找 apple、banana 或 pear,如果我发现其中一个单词出现,我想抓取页面,但如果 peach 也在文本中,我不想抓取内容。我希望这是有道理的?

据我了解,我可以使用 xpath 来创建这样的 or 语句:

//tbody[contains(text(), "apple")] | //tbody[contains(text(), "banana")] | //tbody[contains(text(), "pear")]

但是如果 Xpath 在其中发现桃子,我如何告诉 Xpath 不要抓取页面?

我还从页面中提取了一些其他元素,但我认为它们不相关(如果我错了请告诉我)

谢谢

【问题讨论】:

    标签: python xml xpath scrapy scrapy-spider


    【解决方案1】:

    使用not XPath 函数如下:

    //tbody[not(contains(text(), "peach"))]
    

    您可以将两个表达式组合如下:

    //tbody[contains(text(), "apple") and not(contains(text(), "peach"))]
    

    这将选择包含apple 但不包含pear 的表体。请注意,您可以使用句点字符. 作为text() 的替代。

    【讨论】:

    • 非常感谢,我会尽快将其标记为答案。我知道这很简单,但我正在使用 Xpath 进入一个全新的世界,并迈出一小步。我实际上想尝试运行一些 eBay uk 无法通过 API 提供的统计数据来处理发货与“谁是最喜欢的承运人”的关系,并研究承运人与差/中性反馈之间是否存在直接相关性。这将帮助我更进一步:)
    • 是的,我希望它会,但我知道 eBay 网站是一个难以谈判的网站。我询问排除条目的原因是因为我现在不想包括皇家邮政,因为大多数是与他们一起发送的,我想限制测试中的抓取:) 一个快速的问题,你说我可以组合表达式,我可以说//tbody[contains(text(), "apple", "pear", "banana") and not contains(text(), "peach", "starfruit")]
    • 请注意,句点字符 . 在 XPath 中不能替代 text(). 是上下文节点的缩写,text() 是文本节点(字符数据,标签之间)的节点测试。 contains(text(), "something") 测试上下文节点的第一个子文本节点是否包含“某物”。 contains(., "something") 将测试上下文节点的字符串表示是否包含“某物”(我认为这是您想要/需要的)
    猜你喜欢
    • 2020-09-28
    • 2010-09-19
    • 2020-12-11
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多