【问题标题】:Xpath contains ' or '', how to handle?Xpath中包含'或'',如何处理?
【发布时间】:2017-08-08 13:32:18
【问题描述】:

我正在使用 Scrapy 抓取一个网站,并希望在包含 ' 或 "的表中抓取项目

xpath = '//table/tbody/tr/td[contains(.,\"\'") or contains (.,\"\"\")]/text()'

但是,这会导致:

ValueError: XPath error: Invalid expression in XPATH

还有其他方法可以做到这一点吗? (我尝试使用 unicode 来表示 ' 和 " 但它不起作用。我也尝试过变量无济于事)

谢谢

【问题讨论】:

  • 您忘记转义引号之一: //table/tbody/tr/td[contains(.,\"\'\") 或 contains (.,\"\"\") ]/text()

标签: python xml xpath scrapy lxml


【解决方案1】:

当您搜索 ' 时,使用 " 作为 XPath 字符串文字分隔符以避免冲突,反之则在搜索 " 时:

//table/tbody/tr/td[contains(.,"'") or contains (.,'"')]/text()

现在,你的 python 也使用了一种字符串分隔符,例如,使用",你需要避免与 XPath(上面的 XPath)中的" 冲突。因此,您需要使用 \" 转义 XPath 中的每个 "

xpath = "//table/tbody/tr/td[contains(.,\"'\") or contains (.,'\"')]/text()"

或者,如果这是 Scrapy,您可以使用 XPath variable 指定单引号和双引号而不转义:

query = "//table/tbody/tr/td[contains(.,$single_quote) or contains (.,$double_quote)]/text()"
response.xpath(query, single_quote="'", double_quote='"').extract()

【讨论】:

    猜你喜欢
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多