Javascript Scrapy“跟随动态加载的链接”;“加载更多”-按钮

Javascript Scrapy“跟随动态加载的链接”;“加载更多”-按钮,javascript,python,html,scrapy,scrapy-splash,Javascript,Python,Html,Scrapy,Scrapy Splash,我知道这个问题也曾被类似的方法问过好几次,但我无法理解。这就是我想提出一个具体案例/问题的原因 形势 我抓取了一个显示文章的网站,比如说20篇(但是这个网站有200篇)。我跟随文章链接,在那里我将提取我需要的数据。到目前为止,一切顺利 有些页面似乎有一个加载更多按钮,而不是“正常”分页,以显示超过20篇文章。这就是斗争的开始。我检查了页面(如本文中所述,以那个为例)。但是,单击按钮时请求URL的结构与视频中描述的不同。因为结构将保持不变,而不是加载页面,如?page=8,“page=9”等 单击

我知道这个问题也曾被类似的方法问过好几次,但我无法理解。这就是我想提出一个具体案例/问题的原因

形势

我抓取了一个显示文章的网站,比如说20篇(但是这个网站有200篇)。我跟随文章链接,在那里我将提取我需要的数据。到目前为止,一切顺利

有些页面似乎有一个加载更多按钮,而不是“正常”分页,以显示超过20篇文章。这就是斗争的开始。我检查了页面(如本文中所述,以那个为例)。但是,单击按钮时请求URL的结构与视频中描述的不同。因为结构将保持不变,而不是加载页面,如?page=8,“page=9”等

单击按钮时,我找到了具有以下请求URL的网站:

在这两个示例中,单击按钮时,链接不会更改。所以我有点迷路了,无法应用我所学教程的解决方案

我认为解决方案可能是使用Splash,如前所述。它说:

通常情况下,在显示页面之前,您需要单击按钮。我们可以使用飞溅:鼠标点击功能:

我安装了splash并设置了所有设置。然而,我真的很难将它集成到我的代码中。这真的会起作用吗?还是这个功能只需点击一次按钮?此外,我抓取的网站的按钮元素没有ID,只有类名(但我想这不是我要解决的问题)

我非常感谢您对如何将此splash函数集成到我的scrapy代码或其他解决方案中以跟踪动态加载更多按钮加载的链接的任何意见。

以下是我的代码片段(没有飞溅,只是跟随链接和删除项目):


一些提示:(1)不要点击X,Y坐标。而是使用查找按钮,然后使用触发单击。它应该更健壮,以防事情发生变化。(2)要从Scrapy启动它,您必须生成一个
SplashRequest
。那是从哪里来的。看一看链接页面上的“运行一个简单的启动Lua脚本”部分。先玩一下这个部分,然后带着特定的问题回来。一些提示:(1)不要点击X,Y坐标。而是使用查找按钮,然后使用触发单击。它应该更健壮,以防事情发生变化。(2)要从Scrapy启动它,您必须生成一个
SplashRequest
。那是从哪里来的。看一下链接页面上的“运行一个简单的Splash Lua脚本”部分。先玩一玩,然后带着具体的问题回来。
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
import scrapy

class ExampleSpider(scrapy.Spider):
    name = "example"
    allowed_domains = ["example.com"]
    start_urls = [
        "https://example.com",
    ]


    def parse(self, response):
        # follow links to article
        for href in response.xpath('//div[@class="article"]/a/@href'):
            yield response.follow(href, self.parse_article)

    def parse_article(self, response):
        def get_with_xpath(query):
             return response.xpath(query).get(default='').strip()


        yield {
            'title': get_with_xpath('//meta[@name="title"]/@content'),
            'description': get_with_xpath('//meta[@name="description"]/@content')

            }