返回
从0到1:Python爬虫Eval混淆原理与实践,精准提取电视猫+掌房!
后端
2024-02-09 21:29:59
01 Eval 混淆概述
说简单点,eval 混淆就是把可执行的 Python 代码字符串混淆一下,使之不易被人读懂,以此达到保护代码的目的。混淆后,这些原本可执行的 Python 代码看起来就是一堆乱码。
eval 混淆的实现一般是通过一系列字符串操作函数完成的,例如,使用 join() 和 split() 将代码拆分成多个字符串,再用 replace() 将其中的字母和数字替换成其他字符或数字。
02 案例实战:电视猫爬虫
1. 电视猫简介
电视猫是一款广受欢迎的视频播放器,提供丰富的影视资源。电视猫的爬虫解析难点在于其使用了 eval 混淆技术,使得传统的爬虫解析方法失效。
2. 电视猫爬虫实战
import requests
from bs4 import BeautifulSoup
url = 'https://www.tvmao.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析混淆代码
混淆代码 = soup.find('script', attrs={'id': 'eval_script'}).text
混淆代码 = 混淆代码.replace('eval(', '').replace(')', '')
混淆代码 = 混淆代码.replace('"', '').replace("'", '')
混淆代码 = 混淆代码.split(';')
# 执行混淆代码
for code in 混淆代码:
exec(code)
# 解析视频数据
视频数据 = soup.find_all('div', attrs={'class': 'vod_thumb'})
for 视频 in 视频数据:
视频名称 = 视频.find('a').text
视频链接 = 视频.find('a')['href']
print(视频名称, 视频链接)
03 案例实战:掌房爬虫
1. 掌房简介
掌房是一款备受欢迎的房屋租赁平台,提供海量的房源信息。掌房的爬虫解析难点同样在于其使用了 eval 混淆技术。
2. 掌房爬虫实战
import requests
from bs4 import BeautifulSoup
url = 'https://www.zhangfang.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析混淆代码
混淆代码 = soup.find('script', attrs={'id': 'eval_script'}).text
混淆代码 = 混淆代码.replace('eval(', '').replace(')', '')
混淆代码 = 混淆代码.replace('"', '').replace("'", '')
混淆代码 = 混淆代码.split(';')
# 执行混淆代码
for code in 混淆代码:
exec(code)
# 解析房源数据
房源数据 = soup.find_all('div', attrs={'class': 'list_item'})
for 房源 in 房源数据:
房源名称 = 房源.find('h2').text
房源链接 = 房源.find('a')['href']
print(房源名称, 房源链接)
04 结语
本博客详细介绍了 Python 爬虫 eval 混淆的原理与实践,并通过电视猫和掌房两个案例生动地展示了 eval 混淆的应用。希望本博客能对您有所帮助,祝您在 Python 爬虫的进阶之路上越走越远。