我正在尝试从带有 LinkExtractor 的页面获取链接在无限滚动的页面上。用
做这个 rules = (
Rule(LinkExtractor(allow=".*?(\/nl\/agenda\/).*"), callback='parse_item', follow=True),
)
有效。但是,这在没有 JavaScript 的情况下被调用,因此图像不会在页面中加载(以及我需要的它们的 url)。将 LinkExtractor 更改为时;
rules = (
Rule(LinkExtractor(allow=".*?(\/nl\/agenda\/).*"), callback='parse_item', follow=True, process_links='process_links'),
)
与;
def process_links(self, links):
for link in links:
link.url = "http://localhost:8050/render.html?" + urlencode({ 'url' : link.url })
return links
它只访问它在加载页面时加载的 url(但它需要获取所有你可以通过滚动获得的链接)。出于某种原因,它还会像这样加载一些奇怪的本地主机 URL;
http://localhost:8050/render.html?url=http%3A%2F%2Flocalhost%3A8050%2Fnl%2Fagenda%2xxxxxx
我不知道为什么会这样。
有没有办法在使用 LinkExtractor
和 Splash 时执行 JavaScript,这样我就可以在 LinkExtractor
获取链接之前滚动并获取所有链接?仅在跟踪来自 LinkExtractor
的链接时执行 JavaScript 也足够了,但我不知道从哪里开始这样做。
最佳答案
链接提取器处理当前内容而不是动态呈现的内容。是的,正如您所说,为此,您正在使用 splash 但 splash 用于呈现 JavaScript 代码,而虚拟滚动从未在 splash 中处理,虚拟滚动更像是获取新数据并将其附加到现有 HTML 的网络调用.因此,当您滚动时,找到一个调用,然后点击该调用以获取所需的数据。
关于scrapy - 从无限滚动页面获取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53951247/