【问题标题】:Processing images without downloading using Scrapy Spiders使用 Scrapy Spiders 无需下载即可处理图像
【发布时间】:2023-03-21 17:41:01
【问题描述】:

我正在尝试使用 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 功能解决这个问题,否则需要重新登录网站(发送表单数据)。

【问题讨论】:

  • “那么,在不下载图像的情况下,我必须读取它的像素并在信息上运行一个函数” - 如果没有“它的像素”,您如何期望读取它们?也许您的意思是不将其保存到硬盘?
  • 就是这个意思,我需要读取img src的信息,而不需要下载到硬盘,当然,我需要“下载”[编辑后](谢谢更正)
  • 保存文件有什么用?是关于占用的空间还是有什么不同?
  • 当您在 python 中下载某些内容时,它会存储在内存 (RAM) 中,如果您关闭 python 进程,它会永远消失,您可以选择将其移动到硬盘驱动器以进行持久存储。然而,下载一词意味着将一些数据从服务器移动到客户端,您将数据放在客户端(无论是硬盘驱动器还是内存)上是无关紧要的。

标签: python image request scrapy web-crawler


【解决方案1】:

您可以发出抓取请求以抓取图像,然后回调到其他端点:

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

【讨论】:

  • 没看懂,可能是我解释的不好。。链接hackthissite.org/missions/prog/2/PNG是img src,是我在hackthissite.org/missions/prog/2页面时随机生成的(登录后可以访问)在)。所以我想在登录img标签页面时阅读图像src
  • 是的 parse_page 是你的 ...prog/2 url - 你在那里找到图像 url 并向它发出请求。 parse_image 是带有图像信息的图像响应 - 您在那里处理图像数据。
  • 这正是我想要的!它工作:) 非常感谢你
  • @G.Dantas 如果答案足够,请随意接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
相关资源
最近更新 更多