昨天使用了 Dcard 的 API 来爬取 Dcard 上面的文章。
各位开始在撰写爬虫後,常常会遇到一些网站刻意的挡掉爬虫,这种挡掉爬虫的设计称为反爬虫技术。
最常见的反爬虫技术莫过於验证码了。我反爬虫会分两篇来讨论,今天这篇会专注於验证码的部分。
验证码英文称为 Captcha,是一种区分用户是机器或人类的公共全自动程序。
常见的有
以及 Google 发行的 reCAPTCHA
可能有些读者会发现 Google 发行的 reCAPTCHA 有时候会需要二次验证,有时候不用。事实上,如果演算法检测到当前系统存在风险,比如可能是陌生的网路环境,可能是模拟程序,就会须要二次验证。
要应对验证码有几个方法,以下列出。
人工输入验证码
模拟人类动作(reCAPTCHA )
OCR 辨识验证码
第三方平台验证码辨识服务
User Session
人工输入验证码
此应对方法十分直观,就是当遇到需要验证码的地方时,就用类似 input() 的步骤将其停住,把图片载下来,人工输入验证码,之後继续爬取。
这个应对方法常用於 Selenium 爬取时遇到 reCAPTCHA ,往往会需要这种会渲染网页 JavaScript 或在网页停留、卷动一段时间,而後点击 I'm not a robot 。
此应对方法主要是将验证码的图片使用 OCR 文字辨识。
Python 常用的 OCR 为 pytesseract。
pipenv install pillow
pipenv install pytesseract
pytesseract 需要下载Tesseract执行档,各位要记得安装路径,等等在 Python 程序中需要指定该路径。
载点 : https://github.com/UB-Mannheim/tesseract/wiki
from PIL import Image
import pytesseract
if __name__ == '__main__':
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
img = Image.open('img.png')
text = pytesseract.image_to_string(img)
print(text)
有许多提供这类服务的平台,这边推荐 Anti-captcha,以量计费,如果需求不多,可以使用很久。
先使用浏览器先行登入,之後将 Session 汇出,使爬虫带上该 Session , 便可以达到不使用帐号密码登入的效果,自然就不需要面对验证码。
本次铁人赛有两篇文章用到此技巧。
【Day 11】- 还在 PTT 点击已满 18 岁? 带上 cookies 吧!(实战 PTT 爬虫 1/3)
【Day 21】- 你的爬虫还在用帐号密码进行登入? 带上 Session 吧!(实战 Selenium 自动点击 Instagram 好友贴文赞 1/2)
本次列举了验证码这个反爬虫技术的应对方法,善用这些方法,可以去回避掉一些网页的反爬虫,如果遇到了还是无法用以上方法应对的状况,可以考虑换个爬虫架构,或继续深入优化 OCR 或者一些资安方面绕过手法。
明天会带各位看一下常见的反爬虫技术。
Python 进阶爬虫技巧- Selenium + Anti-captcha 图片验证码破解 : https://medium.com/@keigi1203/python-进阶爬虫技巧-selenium-anti-captcha-图片验证码破解-b9486df79aa7
<<: Day28 Gin with SMTP Server
今天是 Build Optimizations 主题的最後一篇了,到目前为止我们已经认识了 Cod...
今天的介绍的也是属於Node的基础。 process.nextTick 依照Node官网的解说,事实...
接续上篇 介绍一下一般开发 ETL 的流程。每只 ETL 都可以看作是独立的程序,有独立的开发流程。...
API 操作设计 上一篇我们让 API 的参数能够顺利显示在 Swagger UI 中,在设计完参数...
每次网路搜寻关键字SSR、MPA、SPA,都会有看没有懂的感觉,看完过没多久马上就忘了,藉由这次机会...