使用Scrapy Spiders无需下载即可处理图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Scrapy Spiders无需下载即可处理图像相关的知识,希望对你有一定的参考价值。

我正在尝试使用Scrapy Spider解决问题(来自HackThisSite的编程问题):

(1)我必须登录一个网站,提供用户名和密码(已经完成)

(2)之后,我必须访问具有给定URL的图像(该图像仅供登录用户访问)

(3)然后,在不将图像保存在硬盘中的情况下,我必须在一种缓冲区中读取它的信息

(4)函数的结果将填写表格并将数据发送到网站服务器(我已经知道如何执行此步骤)

因此,我可以继续提问:是否可以(使用蜘蛛)读取只有登录用户可访问的图像并在蜘蛛代码中处理它?

我试着研究不同的方法,使用项目管道不是一个好方法(我不想下载文件)。

我已经拥有的代码是:

class ProgrammingQuestion2(Spider):

    name = 'p2'
    start_urls = ['https://www.hackthissite.org/']

    def parse(self, response):

        formdata_hts = {'username': <MY_USER_NAME>,
                'password': <MY_PASSWORD>,
                'btn_submit': 'Login'}

        return FormRequest.from_response(response,
                formdata=formdata_hts, callback=self.redirect_to_page)

    def redirect_to_page(self, response):

        yield Request(url='https://www.hackthissite.org/missions/prog/2/',
                callback=self.solve_question_2)

    def solve_question_2(self, response):

        open_in_browser(response)
        img_url = 'https://www.hackthissite.org/missions/prog/2/PNG'
        # What can I do here?

我希望使用Scrapy函数解决这个问题,否则有必要再次登录网站(发送表单数据)。

答案

您可以生成scrapy请求以爬网映像,然后回调到其他端点:

def parse_page(self, response):
    img_url = 'https://www.hackthissite.org/missions/prog/2/PNG'
    yield Request(img_url, callback=self.parse_image)

def parse_image(self, response):
    image_bytes = response.body
    form_data = form_from_image(image_bytes)
    # make form request

以上是关于使用Scrapy Spiders无需下载即可处理图像的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy 增加随机请求头 user_agent

Scrapy学习篇之Spiders

爬虫:Scrapy4 - Spiders

scrapy结构

scrapy基本知识

Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法