一、分析网页
1、要爬取的内容在网页源码中渲染
2、要爬取的内容部分是乱码,显然是做了反爬
3、找到字体文件
4、用字体文件软件打开
5、用python将字体文件保存成xml格式的文件,并读取里面的内容得到对应的内容
6、找到字体文件中的文字对应的编码和爬取内容中的编码对应关系进行替换
7、将爬取内容中的乱码部分一次替换成对应的文字
二、程序
import requests
from lxml import etree
from fontTools.ttLib import TTFont
# 发送请求 获取源码
url = 'https://club.autohome.com.cn/bbs/thread/665330b6c7146767/80787515-1.html'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36'
}
res_obj = requests.get(url, headers=header)
# 解析数据
tree = etree.HTML(res_obj.text)
contents = tree.xpath('//div[@class="tz-paragraph"]//text()')
auto_font = TTFont('wKgHGFsUz1yAMsAiAABj8AQLwg890..ttf')
# auto_font.saveXML('auto.xml') # 将字体文件保存成xml格式
# 源码:\uedb8
# 字体文件中:uniEDB8
new_font_list = []
font_list = auto_font.getGlyphOrder()
# [1:] 过滤列表中的第一个元素
for font in font_list[1:]:
new_font = r'"\u' + font[3:] + '"'
new_font = eval(new_font)
new_font_list.append(new_font)
# word_list 是提前写好
word_list = ['十','远','很','一','高','九','得','坏','少','右','呢','五','长','八','和','好','低','七','了','矮','左','三','二','近','四','不','短','上','下','大','是','的','地','小','着','六','多','更']
# 替换处理
content_str = ''.join(contents)
# 通过下标索引进行替换
for i in range(len(word_list)):
content_str = content_str.replace(new_font_list[i], word_list[i])
print(content_str)