我正在尝试选择xpath类似于//*[@id="mw-content-text"]/table[@class="wikitable sortable jquery-tablesorter"]
的分区内的所有表。但是选择器不返回任何值。如何通过id / class中包含空格的标签?
答案 0 :(得分:2)
我无法确切地说出问题所在,因为我没有您要解析的源数据。如果您粘贴最小部分会很有帮助。
但无论如何,你有多种选择来实现这一目标。我建议将CSS选择器与XPath选择器结合使用,如下所示:
response.xpath("//*[@id='mw-content-text']").css("table.wikitable.sortable.jquery-tablesorter")
但是如果你只想使用XPath,你可以使用 contains():
response.xpath("//*[@id='mw-content-text']/table[contains(@class,'wikitable sortable jquery-tablesorter')]")
但这可能很棘手,因为它要求表 class 完全定义,它不允许类的不同排序。如果你想覆盖这些情况,我建议你这样使用它:
response.xpath("//*[@id='mw-content-text']/table[contains(@class,'wikitable') and contains(@class, 'sortable') and contains(@class, 'jquery-tablesorter')]")
您可以在Scrapy选择器in the official documentation找到更多信息。
修改强>
正如Rahul所注意到的,这里的问题是类jquery-tablesorter
实际上是由jQuery tablesorter插件动态添加的,因此这个类在scrapy Response中不可见,因为还没有执行JS。要在解决方案中反映这一点,您不应在选择器表达式中包含jquery-tablesorter
。
答案 1 :(得分:0)
我有同样的问题,因为我试图刮一个维基百科页面。该表的类名显示为"wikitable sortable jquery-tablesorter"
,因为另一个答案中提到的插件在使用后添加到类名中。
要获取表格,您只需查找以下课程"wikitable sortable"
即可。这为我挑选了代码。