Python 空格和选择器

Python 空格和选择器,python,scrapy,Python,Scrapy,尝试使用scrapy shell上的选择器从网页中提取信息,但无法正常工作。我相信这是因为类名中存在空格。知道怎么回事吗 我尝试了不同的语法,比如: response.xpath('//p[@class="text-nnowrap hidden-xs"]').getall() response.xpath('//p[@class="text-nnowrap hidden-xs"]/text()').get() 预期结果:帕拉阿伦达尔公寓:里斯本奥利瓦伊斯 实际结果:[]类部分中的空白表示有

尝试使用scrapy shell上的选择器从网页中提取信息,但无法正常工作。我相信这是因为类名中存在空格。知道怎么回事吗

我尝试了不同的语法,比如:

response.xpath('//p[@class="text-nnowrap hidden-xs"]').getall()

response.xpath('//p[@class="text-nnowrap hidden-xs"]/text()').get()

预期结果:帕拉阿伦达尔公寓:里斯本奥利瓦伊斯


实际结果:[]

类部分中的空白表示有多个类,文本nnowrap类和隐藏的xs类。为了通过xpath选择多个类,可以使用以下格式:

//元素[contains@class","class1"及contains@class,'class2']

这是我从你手里抢来的

所以在你的例子中,我相信这是可行的

response.xpath("//p[contains(@class, 'text-nnowrap') and contains(@class, 'hidden-xs')]").getall()

在这种情况下,我更喜欢使用css选择器,因为它的语法非常简单: response.cssp.text nowrap.hidden xs::text

此外,谷歌chrome开发者工具在你观察html代码时会显示css选择器,这使得scraper的开发更加容易

类名中实际上没有空格。在html中,可以通过在class属性中用空格分隔多个类来为html元素指定多个类。这意味着有两个类:text nowrap和hidden xs。这可能有助于进一步调试该问题。通过自己的快速搜索,我找到了以下解决方案,但我自己没有测试:首先检查页面是否没有使用JavaScript向HTML添加元素。Scrapy无法运行JavaScript,您的HTML可能与预期不同。感谢@StephanSchrijver的帮助。这就是重点:classname没有空格。现在我需要知道如何使用'response.css'选择器提取包含空格的类名。做我的研究。谢谢完美的乔治。这就是我渴望得到的答案。谢谢
response.xpath("//p[contains(@class, 'text-nnowrap') and contains(@class, 'hidden-xs')]").getall()