【问题标题】:how to add non-ascii characters in Xpath, in Scrappy如何在 Scrapy 中的 Xpath 中添加非 ascii 字符
【发布时间】:2016-11-26 00:27:18
【问题描述】:

我有以下 Xpath:

bathroom = response.xpath(“.//div[1][contains(., 'Baños’)]/text()").extract_first()

我得到这个错误:

ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters

我已经尝试了这些其他类似问题中给出的解决方案:

Filtering out certain bytes in python

Scrapy xpath utf-8 literals

但没有人能解决我的问题!

注意:使用第一个链接的解决方案,我显然用word = "baños" 替换了'input_string',我得到了一个类似函数的错误1 个参数,2 个给定..."

谁能帮忙?

【问题讨论】:

    标签: python xpath unicode ascii


    【解决方案1】:

    除了文字 Baños,您的代码 sn-p 包含无效的文字字符串分隔符(单引号和双引号),这将导致不同的错误:

    bathroom = response.xpath(“.//div[1][contains(., 'Baños’)]/text()").extract_first()
                              ^                            ^
    

    按照第二个链接中的建议,将整个 XPath 表达式转换为 unicode,并修复上面指出的两个引号应该可以修复初始错误。下面是使用lxml(scrapy 在后台使用)的快速测试:

    >>> from lxml import etree
    >>> root = etree.fromstring('<root/>')
    >>> root.xpath(u".//div[1][contains(., 'Baños')]/text()")
    []
    

    【讨论】:

    • 你说的我已经试过了,但我仍然得到这个错误:ValueError: XPath error: Invalid expression in .//div[1][contains(., 'Ba\xf1os')]/text()
    • 甚至在实际的scrapy shell 中使用以下表达式进行了测试并且没有错误(查看您的实际代码中有什么不同,或者尝试从该代码中复制粘贴并在您的机器上运行):r = response.xpath(u".//div[1][contains(., 'Baños')]/text()").extract_first()
    • 好的,我告诉你我的完整的'Xpath'怎么样(我剪了一点,因为太长了,但基本一样):bathroom = response.xpath(u".//*[@id='details']/div/div/div/div/div[4]/div/div[3]/div[1][contains(., 'Baños')]/div[contains(., 'Baños')]/div[contains(., 'Baños')])]/div/span[3]/span/text()").extract_first()
    • 这部分包含太多],因此无效的XPath错误:/div[contains(., 'Baños')]/div[contains(., 'Baños')])]
    • 是的,你是对的......在我的这个错误之后我绝对应该去睡觉......xD非常感谢你的帮助! :):)
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多