Python:黑板课爬虫闯关第五关
程序员文章站
2022-05-04 13:46:31
第五关是在第三关的基础上加了验证码。验证码识别我们可以通过 tesserocr 来识别,tesserocr 的使用在我的前面两篇博客中有介绍。在这里,tesserocr 的识别率不是很高,大概只有10%到15%。 ......
第五关是最后一关了,至此之后黑板课就没有更新过关卡了。
第五关地址:http://www.heibanke.com/lesson/crawler_ex04/
可以看到,是在第三关的基础上加了验证码。
验证码识别我们可以通过 tesserocr 来识别,tesserocr 的使用在我的前面两篇博客中有介绍。
在这里,tesserocr 的识别率不是很高,大概只有10%到15%,通过训练,也没能有啥改善,不知道是不是我弄错了,有尝试过的朋友可以给我留言。
代码如下:
import re import requests import time from pil import image from bs4 import beautifulsoup import tesserocr def main(): url_login = 'http://www.heibanke.com/accounts/login/' url = 'http://www.heibanke.com/lesson/crawler_ex04/' session = requests.session() session.get(url_login) token = session.cookies['csrftoken'] session.post(url_login, data={'csrfmiddlewaretoken': token, 'username': 'xx', 'password': 'xx'}) psd = 0 while psd < 30: print(f'test password {psd}') r = session.get(url) soup = beautifulsoup(r.text, 'lxml') img_tag = soup.find('img') img_url = 'http://www.heibanke.com' + img_tag['src'] requests.get(url) code = get_code(img_url) if code is none: time.sleep(1) continue token = session.cookies['csrftoken'] r = session.post(url, data={'csrfmiddlewaretoken': token, 'username': 'aa', 'password': psd, 'captcha_0': code[0], 'captcha_1': code[1]}) html = r.text if '验证码输入错误' in html: time.sleep(1) elif '密码错误' not in html: m = re.search('(?<=\<h3\>).*?(?=\</h3\>)', html) print(m.group()) return else: time.sleep(1) psd += 1 def get_code(url): flag = url.split("/")[-2] fn = flag + '.png' with open(fn, 'wb+') as sw: sw.write(requests.get(url).content) img = image.open(fn) img = img.convert('l') result = tesserocr.image_to_text(img).strip() print(flag, result) if re.match('^[a-za-z0-9]{4}$', result): return flag, result if __name__ == '__main__': main()