我知道这个问题有人问过几次类似的方法,但我不能把我的脑袋绕过去。这就是为什么我要打开一个具体的案例/问题。在
情况
我抓取一个显示文章的网站,比如说20篇(但是这个网站有200篇)。我跟随文章链接,在那里我将提取我需要的数据。到目前为止,还不错。在
有些页面似乎有一个加载更多按钮,而不是“普通”分页,以显示超过20篇文章。这就是斗争的开始。我检查了页面(如本文video所述,例如example)。但是,单击按钮时请求URL的结构与视频中描述的结构不同。因为结构将保持不变而不是像http://quotes.toscrape.com/api/quotes那样加载页面?第8页,“第9页”等
我在点击按钮时发现了具有以下请求URL的网站:
在这两个例子中,当单击按钮时,链接不会更改。所以我有点迷路了,不能应用我学过的教程的解决方案。在
我认为解决方案可能是使用Splash,如所述here。它声明:
It’s often the case that you need to click a button before the page is displayed. We can do that using splash:mouse_click function:
function main(splash)
assert(splash:go(splash.args.url))
local get_dimensions = splash:jsfunc([[
function () {
var rect = document.getElementById('button').getClientRects()[0];
return {"x": rect.left, "y": rect.top}
}
]])
splash:set_viewport_full()
splash:wait(0.1)
local dimensions = get_dimensions()
splash:mouse_click(dimensions.x, dimensions.y)
-- Wait split second to allow event to propagate.
splash:wait(0.1)
return splash:html()
end
我安装了splash并设置了所有设置。然而,我真的很难在我的垃圾代码中集成这一点。这个功能真的能用吗?还是只需点击一下按钮?此外,我抓取的网站的button元素没有ID,只有类名(但我想这不是我要解决的问题)。在
我非常感谢您的任何意见,无论是如何将这个splash函数集成到我的废代码中,还是使用动态加载更多按钮加载链接的另一种解决方案。
以下是我的代码片段(没有Splash,只关注链接和抓取项):
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐