如何使用类id中有空格的选择器在scray中选择表?

2024-06-26 05:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图选择一个分区中的所有表,它的xpath类似于//*[@id="mw-content-text"]/table[@class="wikitable sortable jquery-tablesorter"]。但是选择器不返回任何值。我怎样才能通过那些在id/class中有空格的标签?在


Tags: textidtable选择器标签contentjqueryxpath
2条回答

我也遇到了同样的问题,因为我正试图从维基百科上搜刮网页。该表的类名显示为"wikitable sortable jquery-tablesorter",因为另一个答案中提到的插件在使用后会添加到类名中。在

为了获取该表,您只需查找下面的类"wikitable sortable"。这帮我找到了密码。在

我不能确切地说是什么问题,因为我没有您要解析的源数据。如果你把最小的部分粘贴起来会很有帮助。在

但无论如何,你有不止一个选择来实现这一点。我建议将CSS选择器与XPath选择器结合使用,如下所示:

response.xpath("//*[@id='mw-content-text']").css("table.wikitable.sortable.jquery-tablesorter")

但是如果只想使用XPath,可以使用contains()

^{pr2}$

但这可能会很棘手,因为它要求表定义得一模一样,它不允许类的不同顺序。如果你想报道这些案件,我建议你这样使用:

response.xpath("//*[@id='mw-content-text']/table[contains(@class,'wikitable') and contains(@class, 'sortable') and contains(@class, 'jquery-tablesorter')]")

您可以找到更多关于废选择器in the official documentation的信息。在

编辑:
正如Rahul所注意到的,这里的问题是类jquery-tablesorter实际上是由jQuerytablesorter插件动态添加的,因此这个类在scrapy响应中不可见,因为还没有执行JS。要在解决方案中反映这一点,不应在选择器表达式中包含jquery-tablesorter。在

相关问题 更多 >