持续更新第二弹!
前期准备 前提说明:本次选取实习僧的代码字体加密进行破解,需要注意的是,实习僧的字体加密每隔一段时间会发生变化,但破解方法大同小异。 对象说明:本次选取实习僧网页中Python实习薪资进行破解,前面一些代码不做过多叙述,主要分享破解方法。 代码破解 铺垫代码展示:import requests
from bs4 import BeautifulSoup
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
def detail_data(url):#定义一个函数,方便操作。
html=requests.get(url,headers=headers)
soup=BeautifulSoup(html.text,'lxml')
title=soup.select('.new_job_name span')[0].get_text()
salary=soup.select('.job_msg span')[0].get_text()
print(title,salary)
for i in range (1,4):
url="https://www.shixiseng.com/interns?page={}&keyword=python&type=intern".format(i)
html=requests.get(url,headers=headers)
soup=BeautifulSoup(html.text,"lxml")
detail_urls=soup.select('.f-l .intern-detail__job p a')
for d in detail_urls:
detail_data(d['href'])
出现乱码:
数据实习生 -/天
Python/C++/C#软件开发工程师 -/天
后端开发实习生 -/天
金融工程实习生 -/天
分析乱码:首先新建一个测试py,然后转换为utf8编码形式,多选取几个数据,研究其内在规律,因为篇幅原因,此次只选取6个数字。
print('-'.encode('utf8'))
#200-250
#b'\xee\x8b\x87\xee\x87\xac\xee\x87\xac-\xee\x8b\x87\xef\x93\xbf\xee\x87\xac'
#120-180
#b'\xee\x8b\x87\xef\x9f\xa9\xee\x8b\x87\xee\x87\xac-\xef\x9f\xa9\xee\x9d\xa1\xee\x87\xac'
#80-120
#b'\xee\x8b\x87\xef\x9f\xa9\xee\x8b\x87\xee\x9d\xa1\xee\x87\xac-\xef\x9f\xa9\xee\x8b\x87\xee\x87\xac
#150-200
#b'\xee\x8b\x87\xef\x9f\xa9\xee\x8b\x87\xee\x9d\xa1\xef\x9f\xa9\xef\x93\xbf\xee\x87\xac-\xee\x8b\x87\xee\x87\xac\xee\x87\xac
#50-50
#b'\xee\x8b\x87\xef\x9f\xa9\xee\x8b\x87\xee\x9d\xa1\xef\x9f\xa9\xef\x93\xbf\xef\x93\xbf\xee\x87\xac-\xef\x93\xbf\xee\x87\xac
#250-300
#b'\xee\x8b\x87\xef\x9f\xa9\xee\x8b\x87\xee\x9d\xa1\xef\x9f\xa9\xef\x93\xbf\xef\x93\xbf\xee\x8b\x87\xef\x93\xbf\xee\x87\xac-\xee\x8d\xad\xee\x87\xac\xee\x87\xac
#可以发现规律,‘—’后每三个编码表示一个数字,可以将每个数字和编码对应起来,注意需要多次确认。
#0 \xee\x87\xac
#1 \xef\x9f\xa9
#2 \xee\x8b\x87
#3 \xee\x8d\xad
#5 \xef\x93\xbf
#8 \xee\x9d\xa1
代码转换:因为是通过utf8进行破译的,所以在开始和结束时都要记得转换。
import requests
from bs4 import BeautifulSoup
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
def detail_data(url):#定义一个函数,方便操作。
html=requests.get(url,headers=headers)
soup=BeautifulSoup(html.text,'lxml')
title=soup.select('.new_job_name span')[0].get_text()
salary=soup.select('.job_msg span')[0].get_text().encode('utf8')
salary=salary.replace(b'\xee\x87\xac',b'0')
salary=salary.replace(b'\xef\x9f\xa9',b'1')
salary=salary.replace(b'\xee\x8b\x87',b'2')
salary=salary.replace(b'\xee\x8d\xad',b'3')
salary=salary.replace(b'\xef\x93\xbf',b'5')
salary=salary.replace(b'\xee\x9d\xa1',b'8')
salary=salary.decode('utf8')
print(title,salary)
for i in range (1,4):
url="https://www.shixiseng.com/interns?page={}&keyword=python&type=intern".format(i)
html=requests.get(url,headers=headers)
soup=BeautifulSoup(html.text,"lxml")
detail_urls=soup.select('.f-l .intern-detail__job p a')
for d in detail_urls:
detail_data(d['href'])
结果图:
后端开发实习生 150-200/天
金融工程实习生 150-150/天
后台实习生 120-200/天
补充:因为破解数字有限,所以有些还是无法显示,如果要全部显示就可以按照以上方法将数字编码补全即可。