使用Scrapy请求上传验证码图片

sky*_*sky 5 python post http recaptcha scrapy

我正在尝试使用2Captcha.com服务来解决验证码。首先,我保存验证码图像:

urllib.urlretrieve(captcha_image_link, 'captcha.jpg')
Run Code Online (Sandbox Code Playgroud)

接下来,我需要将图像上传到服务器以进行识别。使用简单的请求就像

files = {'file': open('captcha.jpg', 'rb')}
payload = {'key': TWOCAPTCHA_APIKEY, 'method': 'post'}
request = requests.post('http://2captcha.com/in.php', files=files, data=payload)
Run Code Online (Sandbox Code Playgroud)

但是,如何使用Scrapy发出相同的请求?我的意思是,如何将图像文件附加到POST请求?这可能吗?如果不是,那么我想知道在Scrapy蜘蛛内部使用普通POST请求(以及urlretrieve)是否太糟糕了?

Tom*_*art 0

您可以使用 Scrapy 发送 POST 请求(请参阅文档),但需要考虑两件事:

  1. 在为您执行此操作时,您必须自己对文件进行编码requests.post
  2. Scrapy 会异步发送请求,当您需要解决验证码时,这可能不是您想要的。

因此,我认为在 Scrapy 蜘蛛中使用您当前的方法没有任何问题。