从无限滚动页面获取链接

时间:2018-12-27 21:55:29

标签: scrapy scrapy-splash

我正在尝试从具有无限滚动页面的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'),
)

with;

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就足够了,但是我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

链接提取器适用于当前内容,而不适用于动态呈现的内容。是的,正如您所说,为此,您使用的是启动功能,但启动功能用于渲染JavaScript代码,而虚拟滚动功能从未在启动功能中进行处理,虚拟滚动功能更像是网络调用,用于获取新数据并将其附加到现有HTML 。因此,在滚动时,找到一个电话,然后打该电话以获取所需的数据。