Python爬虫,爬取58租房数据
这俩天项目主管给了个爬虫任务,要爬取58同城上福州区域的租房房源信息。因为58的前端页面做了base64字体加密所以爬取比较费力,前前后后花了俩天才搞完。
项目演示与分析
使用python的request库和字体反爬文件,通过替换来实现爬取,最后保存 为excel文件
演示:
分析:
1.首先 直接从58爬取数据可以很明显的看到所有的数字都被替换成了乱码
2.我们打开页面右键点击查看源代码,可以发现所有的数字都变成了一串诡异的编码,而这些编码似乎又存在某种联系
3.我们翻到代码的最前端发现一连串的字母,这些其实就是base64加密后的字体文件信息,可以进行正则匹配提取,然后解码写入字体文件。
4.我们通过输出.xml和字体库文件可以分析编码规律
import requestsimport refrom fontTools.ttLib import TTFont#下载字体文件url="https://fz.58.com/chuzu/pn1"
response = requests.get(url=url.format(page=1),headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'})
font_base64 = re.findall("base64,(AA.*AAAA)", response.text)[0] # 找到base64编码的字体格式文件
font = base64.b64decode(font_base64)
with open('ztk01.ttf', 'wb') as tf:
tf.write(font)font_object = TTFont('58font2.ttf')font_object.saveXML('58font2.xml')
5.通过对比字体库文件和输出的xml内容,glyph00007对应6,glyph00006对应5。可以很明显的发现规律:对每一个glyph0000x对应数字x-1