在网上寻找Scrapy来解决验证码时,我认为即使从一开始就没有好的例子。
我创建了一个非常基本的验证码页面。 http://145.100.108.148/login3/
是否有人有一个有效的例子来解决这个问题,或者至少以合适的方式配置Scrapy来解决它。
答案 0 :(得分:3)
使用Pillow和Python Tesseract可以轻松解决验证码本身问题。困难的部分是实现如何处理cookie(PHPSESSID
)。以下是您的案例的完整工作示例(使用Python 2):
# -*- coding: utf-8 -*-
import io
import urllib2
from PIL import Image
import pytesseract
import scrapy
class CaptchaSpider(scrapy.Spider):
name = 'captcha'
def start_requests(self):
yield scrapy.Request('http://145.100.108.148/login3/',
cookies={'PHPSESSID': 'xyz'})
def parse(self, response):
img_url = response.urljoin(response.xpath('//img/@src').extract_first())
url_opener = urllib2.build_opener()
url_opener.addheaders.append(('Cookie', 'PHPSESSID=xyz'))
img_bytes = url_opener.open(img_url).read()
img = Image.open(io.BytesIO(img_bytes))
captcha = pytesseract.image_to_string(img)
print 'Captcha solved:', captcha
return scrapy.FormRequest.from_response(
response, formdata={'captcha': captcha},
callback=self.after_captcha)
def after_captcha(self, response):
print 'Result:', response.body
答案 1 :(得分:1)
这是一种解决方案,适用于纯图像
best = ("https://my captcha url")
f = open('captcha.jpg','wb')
f.write(urllib.urlopen(best).read())
f.close()
import pytesseract
import cv2
import pytesseract
from PIL import Image
from pdf2image import convert_from_path
#img = Image.open('captcha.jpg')
image = cv2.imread('captcha.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
#gray = cv2.medianBlur(gray, 3)
filename = "{}.png".format("temp")
cv2.imwrite(filename, gray)
text = pytesseract.image_to_string(Image.open('temp.png'))
print text
答案 2 :(得分:0)
https://www.imagetyperz.com/Forms/api/api.html,您可以检查其captcha solver api
。他们可以绕过所有类型的验证码,包括recaptcha v2