2017-08-13 26 views
4

我试图使用2Captcha.com服务解决验证码问题。首先,我保存验证码图像:使用Scrapy请求上传验证码图像

urllib.urlretrieve(captcha_image_link, 'captcha.jpg') 

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

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

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

+0

为什么你必须使用scrapy提出请求。在这种情况下,您只需要解决的验证码的响应,以便下一个请求可以完成。所以'进口请求' – surfer190

+0

我只是想澄清一下自己 - 在Scrapy蜘蛛里面使用'requests'安全和正确吗?简单的请求会减慢速度吗? – sky

+0

它可能会。你可以阅读这篇有趣的文章,但我不能说它是“正确”还是“错误”:http://www.scrapinginsider.com/2016/01/scrapy-urllib2-requests-beautifulsoup-lxml.html – surfer190

回答

0

您可以发送使用Scrapy(见documentation)POST请求,但都需要考虑两件事情:

  1. 你将不得不对自己的文件进行编码,而requests.post可以实现这个要求。
  2. Scrapy会异步发送请求,当您需要解决验证码时,这可能不是您想要的。

因此,我没有看到使用Scrapy蜘蛛内的当前aproach错误。