返回

从0到1:Python爬虫Eval混淆原理与实践,精准提取电视猫+掌房!

后端

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 爬虫的进阶之路上越走越远。