文本混淆反爬虫
文本混淆可以有效地避免爬虫获取Web应用中重要的文字数据,使用文本混淆限制爬虫获取文本数据的方法称为文本混淆反爬。反爬虫的前提是不能影响用户正常浏览网页和阅读文字内容,直接混淆文本很容易被看出来,所以开发者通常是利用CSS的特性来实现混淆。
常见的文本混淆手段有图片伪装、文字映射和自定义字体等。
图片伪装反爬虫
图片伪装指的是将带有文字的图片与正常文字混合在一起,以达到“鱼目混珠”的效果。这种混淆方式并不会涌向用户阅读,但是可以让爬虫程序无法获得“所见”的文本内容。
图片伪装反爬虫绕过实战
"""
图片伪装反爬虫示例
网址:http://www.porters.vip/confusion/recruit.html
任务:抓取招聘网站企业详情页的中企业名称及联系电话
思路:
1.向目标网站发起网络请求
2.使用Parsel库从响应正文中提取图片名称,并将它与URL拼接完整的地址
3.向图片发起网络请求
4.从响应正文中提取图片内容,并使用光学字符识别技术(PyTessract库)从图片中提取文字
"""
import io
import requests
from urllib.parse import urljoin
from parsel import Selector
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
def __init__():
url = 'http://www.porters.vip/confusion/recruit.html'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
return url,headers
def get_request_from_page(url):
response = requests.get(url=url,headers=__init__()[1])
if response.status_code == 200:
return response
else:
return False
def get_content_from_page():
response = get_request_from_page(url=__init__()[0]).text
sel = Selector(response)
#从响应正文中提取图片名称
image_name = sel.css('.pn::attr("src")').extract_first()
#拼接图片名和URL
image_url = urljoin(__init__()[0],image_name)
print(image_url)
#请求图片,拿到图片的字节流内容
image_body = get_request_from_page(image_url).content
#使用Image.open打开图片字节流,得到图片对象
image_stream = Image.open(io.BytesIO(image_body))
print(pytesseract.image_to_string(image_stream))
if __name__ == '__main__':
get_content_from_page()
运行结果:
注意:
1、安装必要的包:
pip install pillow
pip install pytesseract
2、安装tesseract-ocr的识别引擎
- 下载地址:https://github.com/UB-Mannheim/tesseract/wiki
或者更多版本的tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/
* 装完成后配置环境变量: 我的电脑 ->属性 -> 高级系统设置 ->环境变量 ->系统变量 ,在 path 中添加 安装路径。
在命令行 WIN+R 输入cmd :输入 tesseract -v ,出现版本信息,则配置成功。