使用scrapy-splash 抓取javascript 生成的结果

问题描述

当您在字典搜索框中引入一些首字母缩略词时,我试图抓取由 javascript 函数生成的结果。这是我正在使用的代码

import scrapy
from scrapy_splash import SplashFormRequest


class SedomSpider(scrapy.Spider):
    name = 'sedom-spider'
    url_s = 'https://www.sedom.es/diccionario/'

    formdata = {'sigla': 'AA'}

    def parse(self,response):
        return SplashFormRequest(
        url=self.url_s,formdata=self.formdata,callback=self.after_login
    )

    def after_login(self,response):
        print(response.body)

我获得了 html 正文,但我应该看到的生成结果 (<span id="resultado">...</span>) 不在其中...

我也试过:

import scrapy
from scrapy_splash import SplashRequest,SplashFormRequest


class SedomSpider(scrapy.Spider):
    name = 'sedom-spider'
    url_s = 'https://www.sedom.es/diccionario/'

    formdata = {'sigla': 'AA'}

    def start_requests(self):
        yield SplashRequest(
            url=self.url_s,callback=self.parse
        )

    def parse(self,response):
        yield SplashFormRequest.from_response(
            response,callback=self.after_login
        )

    def after_login(self,response):
           print(response.body)

但后来我收到此错误

ValueError:请求 url 中缺少方案:javascript:procesar()

我知道scrapy-splash 配置良好,因为我做了这个tutorial 并且工作正常。我可能对使用这个库有误解,因为我已经尝试了我找到的每一个解决方案,但我无法让它工作......

解决方法

好吧,我终于找到了解决方案。我把它贴在这里以防对某人有用。

import scrapy
from scrapy_splash import SplashFormRequest


class SedomSpider(scrapy.Spider):
    name = 'sedom-spider'
    start_urls = ['https://www.sedom.es/diccionario/',]

    formdata = {'sigla': 'AA'}

    def parse(self,response):
        yield SplashFormRequest.from_response(
            response,url='https://www.sedom.es/diccionario/procesarBusquedaSigla.php',formdata=self.formdata,callback=self.parse_details,args={'wait': 5}
        )

    def parse_details(self,response):
        print(response.body)

主要问题是我没有在 SplashFormRequest.from_response() 中使用正确的网址。