【问题标题】:Scrape javascript generated result with scrapy-splash使用 scrapy-splash 抓取 javascript 生成的结果
【发布时间】:2021-05-11 15:31:52
【问题描述】:

当您在字典搜索框中引入一些首字母缩写词时,我正在尝试抓取 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 body,但是我应该看到的生成结果(<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,
            formdata=self.formdata,
            callback=self.after_login
        )

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

然后我得到这个错误:

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

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

【问题讨论】:

    标签: python web-scraping scrapy scrapy-splash


    【解决方案1】:

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

    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() 中使用的网址不正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2021-08-16
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多