前言:最近想试试抓取大众点评数据,找了些开源代码发现基本上都用不了。自己写了一个能跑起来的项目,分享给大家,首先抓取“海底捞”店铺的列表页数据。
注意,大众点评的采集需要全程登录,我是直接使用自己账号的cookie登录。
1.找到列表页请求接口
**进入点评网首页 搜索海底捞,找到列表页接口
https://www.dianping.com/search/keyword/344/%E6%B5%B7%E5%BA%95%E6%8D%9E/p1
可以看到这个url有几个参, 第一个344是搜索的地区,中间那一段乱码代表的是搜索关键字(搜索关键字后 查看接口,根据url参数,就可以替换关键字为乱码),p1是翻页参数**
可以看到 店铺信息的返回数据都是加密字符 因为点评网自己加载了字体文件
2.破解字体文件反爬
进入这个url
这些以woff为结尾就是字体文件 把他们下载到本地 用FontCreator加载下(用百度在线字体打开会报错 不知道什么原因)
可以看到 每一个汉字都会对应一个编码 接下来就要将汉字和编码组成一个映射表。
这里可以选择用ocr识别或者用第三方库fontTools加载字体文件(ocr不是那么准确),我这里用第二种方式。
首先取出全部的汉字编码 存储到列表中
from fontTools.ttLib import TTFont
font = TTFont('./font/' + name[1] + '.woff') # 加载字体文件 .woff后缀
uni_list = font['cmap'].tables[1].ttFont.getGlyphOrder() # 取出映射编码保存到列表中
自定义所有汉字列表 并将其存储为json文件
接下来把两个表结合成字典 {编码:编码对应汉字,…}
再根据编码替换html中的每个节点信息,html的中的汉字就已经还原了。
接下来只需要自行解析并存储下来就可以。
项目github:https://github.com/sph116/dazhong_spiderhttps://github.com/sph116/dazhong_spider
我只是讲一下大体思路 实际上很多细节我没有一一解析。大家可以参照我的github,后续我将会单独写一篇文章,来讲解详细代码 欢迎交流
==以下是以”海底捞“关键词搜索为例(全国670家左右海底捞分店) 采集到的各个店铺多维数据展示 ==