带有 svg 元素的 Scrapy LinkExtractor 作为下一步按钮

use*_*791 5 scrapy

我正在使用一个 CrawlSpider,它使用链接提取递归地跟踪调用下一页的链接,例如:

rules = (Rule(LinkExtractor(
               allow=(),\
               restrict_xpaths=('//a[contains(.,"anextpage")]')),\
               callback='parse_method',\
               follow=True),
        )
Run Code Online (Sandbox Code Playgroud)

我已经应用这个策略来递归抓取不同的网站,只要 html 标签中有文本,比如<a href="somelink">sometext</a>,一切正常。

我现在正在尝试抓取一个具有

<div class="bui-pagination__item bui-pagination__next-arrow"> <a class="pagenext" href="/url.html" aria-label="Pagina successiva"> <svg class="bk-icon -iconset-navarrow_right bui-pagination__icon" height="18" role="presentation" width="18" viewBox="0 0 128 128"> <path d="M54.3 96a4 4 0 0 1-2.8-6.8L76.7 64 51.5 38.8a4 4 0 0 1 5.7-5.6L88 64 57.2 94.8a4 4 0 0 1-2.9 1.2z"></path> </svg> </a> </div>

作为“下一步”按钮而不是简单的文本,我的 LinkExtractor 规则似乎不再适用,并且蜘蛛在第一页后停止。

我试图寻找 svg 元素,但这似乎并没有触发提取:

restrict_xpaths=('//a[contains(.,name()=svg) and contains(@class,"nextpageclass")]'))
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?

小智 -1

这很可能是因为该网站使用 JavaScript。您可能需要使用 Splash 模拟点击来导航并返回预渲染的网站。这是一个很好的起点:

https://docs.scrapy.org/en/latest/topics/dynamic-content.html