我正在使用一个 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