根本没有正确的选择,我们只有靠奋斗来使当初的选择显得正确。

—— 一个有思考的程序员

【反爬绕过】

标签:
爬虫
反爬绕过
User-Agent
动态渲染
Selenium 识别
验证码
文本混淆
App 反爬
常用反爬虫分为以下几大类:User-Agent 反爬、动态渲染反爬、Selenium 识别反爬、验证码反爬、文本混淆反爬、App 反爬等。
我们针对这几类反爬做针对的反爬绕过。
User-Agent 反爬算是最简单的反爬了,绕过也很简单,只要在请求头里添加 User-Agent 一般就可以了。
关键代码 Python 示例:
import requests

url = 'https://www.test.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'
}

response = requests.get(url, headers=headers)
  
动态渲染是通过 AJax 等技术延迟加载数据的一种反爬手段,用浏览器可以正常看到数据,简单的用爬虫请求获取不到数据,这种情况可以用 Selenium 模拟真实浏览器获取数据。
关键代码 Python 示例:
from selenium import webdriver

url = 'https://www.test.com'

driver = webdriver.Firefox()
driver.get(url)
  
有些网站会识别你用的是真实浏览器还是 Selenium 模拟,比如淘宝登录页面等。要想欺骗检测,可以用 js 代码修改属性。
关键代码 Python 示例:
from selenium import webdriver

url = 'http://www.test.com'
js_script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'

driver = webdriver.Firefox()
driver.get(url)
driver.excute_script(js_script)
    
常见的验证码有:数字验证码、滑块验证码、拼图验证码、点选验证码等。
数字验证码的绕过方法一般为:1.用程序不停的刷新验证码,下载收集它的不同样本;2.切割图片,切成每个单独数字一张图;3.用 opencv 对图片进行灰度图处理、二值化处理、膨胀缩放处理,去掉或淡化背景干扰线;4.用机器学习训练已有数据。就可以识别验证码了。
关键代码 Python 示例:
import numpy as np
import cv2