python - 使用 Scrapy Spiders 在不下载的情况下处理图像

标签 python image request scrapy web-crawler

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

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

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

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

(4) 函数的结果会填写一个表单并将数据发送到网站服务器(这一步我已经知道怎么做了)

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

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

我已有的代码是:

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

关于python - 使用 Scrapy Spiders 在不下载的情况下处理图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55891234/

相关文章:

java - Tomcat 请求超时

asp.net - 使用 ASP.NET Web API 作为图像服务

image - 是否可以修改图像,让近视患者不戴眼镜也能看清楚?

logging - WSO2 ESB 跟踪请求-响应

python - 更快的 RCNN tensorflow 对象检测 API : dealing with big images

css - 响应式网页需要多大尺寸的图片?

request - 如何在shopware 6中访问订阅者中的请求数据

python - 导入错误:没有名为 'nose' 的模块

python - 使用python提取zip文件

python - Django 中多对多字段的 PATCH