我正在尝试从具有无限滚动页面的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就足够了,但是我不知道从哪里开始。
答案 0 :(得分:0)
链接提取器适用于当前内容,而不适用于动态呈现的内容。是的,正如您所说,为此,您使用的是启动功能,但启动功能用于渲染JavaScript代码,而虚拟滚动功能从未在启动功能中进行处理,虚拟滚动功能更像是网络调用,用于获取新数据并将其附加到现有HTML 。因此,在滚动时,找到一个电话,然后打该电话以获取所需的数据。