Scrapy Splash 代码刺激点击链接

问题描述

我刚刚开始学习scrapy并被其中一个问题陈述所困扰。 有人可以帮助我解决下面提到的查询,因为我对此很困惑。任何帮助将不胜感激。

我正在使用 Scrapy Splash 来抓取具有如下元素的页面: 1 2 3 4 5 下一个

我的目标:提取每个页面上的所有锚标记,然后单击“下一步”(在带有标记的 li 元素下)。继续这样做,直到没有“下一个”元素。

我想“点击”带有“Next”(li 标签)的锚点,然后执行 javascript 以获取下一页

注意:我必须点击每个项目,因为整个网站的分页具有相同的 URL。

我当前的代码如下所示:

lua_script = """
    function main(splash,args)
        assert(splash:go(url)
        splash:wait(0.5)
        # assert(splash:runjs('document.find_element_by_xpath('//*[@class="element__nav element__nav--next"]'))
        assert(splash:runjs(javascript))
        return {
            html = splash:html(),}

    end
 """
 
 def start_requests(self):
    yield scrapy.Request(url=url,callback=self.extract_data1)

 def extract_data1(self,response):
    ##gives me the URL of the first page 
    urls = response.xpath('//h4//a/@href').extract()
    print(URLs)
    ## end 
    ## then I want to click the "next" and paginate to page 2
    javascript = "doSubmit('frmRow',1,0)"

    href = response.xpath('//*[@class="element__nav element__nav--next"]/@href')

    if href:
        new_url = href.extract_first()
  
        yield SplashRequest(new_url,self.parse,cookies={'store_language': 'en'},endpoint='execute',args={'lua_source': self.lua_script,'javascript': javascript})

“下一个”元素 HTML 看起来像 dis:

<li class="links-list__element"><a id="ctl00_ctl28_g_b9a9f79f_4632_465f_b82a_c1ad07511a2f_ctl04_listItemActionToolbarControlBottom_pagingControl_pagingControl_pageno1" class="element__link" data-unique-id="ctl00$ctl28$g_b9a9f79f_4632_465f_b82a_c1ad07511a2f$ctl04$listItemActionToolbarControlBottom$pagingControl$pagingControl$pageno1" data-pos-x="0" data-pos-y="0" aria-label="Goto Page 1" aria-current="true" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ctl28$g_b9a9f79f_4632_465f_b82a_c1ad07511a2f$ctl04$listItemActionToolbarControlBottom$pagingControl$pagingControl$pageno1&quot;,&quot;&quot;,true,false,true))">1</a></li>

我不确定这个脚本是否有效。有人可以帮我吗。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)