Scrapy | 跟踪动态加载“加载更多”按钮的链接

2024-04-26 21:49:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题有人问过几次类似的方法,但我不能把我的脑袋绕过去。这就是为什么我要打开一个具体的案例/问题。在

情况

我抓取一个显示文章的网站,比如说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}$

Tags: to代码rectcom网站链接functionbutton