Scrapy Splash截图?

Exa*_*rph 6 python lua splash-screen scrapy

我正在尝试抓取一个网站,同时截取每个页面的屏幕截图.到目前为止,我已经成功拼凑了以下代码:

import json
import base64
import scrapy
from scrapy_splash import SplashRequest


class ExtractSpider(scrapy.Spider):
    name = 'extract'

    def start_requests(self):
        url = 'https://stackoverflow.com/'
        splash_args = {
            'html': 1,
            'png': 1
        }
        yield SplashRequest(url, self.parse_result, endpoint='render.json', args=splash_args)

    def parse_result(self, response):
        png_bytes = base64.b64decode(response.data['png'])

        imgdata = base64.b64decode(png_bytes)
        filename = 'some_image.png'
        with open(filename, 'wb') as f:
            f.write(imgdata)
Run Code Online (Sandbox Code Playgroud)

它可以很好地进入网站(例如,stackoverflow)并返回png_bytes的数据,但是当写入文件时 - 返回一个损坏的图像(不加载).

有没有办法解决这个问题,或者找到更有效的解决方案?我已经读过Splash Lua Scripts可以做到这一点,但一直无法找到实现它的方法.谢谢.

pau*_*rth 5

您正在从base64解码两次:

       png_bytes = base64.b64decode(response.data['png'])
       imgdata = base64.b64decode(png_bytes)
Run Code Online (Sandbox Code Playgroud)

简单地说:

    def parse_result(self, response):
        imgdata = base64.b64decode(response.data['png'])
        filename = 'some_image.png'
        with open(filename, 'wb') as f:
            f.write(imgdata)
Run Code Online (Sandbox Code Playgroud)

  • 我找到了解决方案 - 它是添加延迟,允许完整渲染!现在全部排序,再次感谢您的帮助. (2认同)
  • @ExamOrph 我应该在哪里以及如何添加延迟?谢谢 (2认同)