2017-08-13 59 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錯誤。