大众点评爬虫可用api

作者丨linkin

https://segmentfault.com/a/1190000017891608

大众点评爬虫、API,可以进行单独城市、单独地区、单独商铺的爬取、搜索、多类型地区搜索、信息获取、提供MongoDB数据库存储支持,可以进行点评文本解密的爬取、存储。

可用于大众点评网页版

目前可用:

· 获取大众点评当前可以查询查看到店铺的所有已激活城市信息

· 获取大众点评里所有省市直辖市的provinceId以及地区areaId

· 根据给定的中文城市、地区名称来获取其大众点评首页链接

· 通过id获取地区名称

· 通过id获取地区内的所有子地区信息

· 获取某个城市的 热搜关键词

· 获取某个城市的 当前可见有效店铺分类

· 获取某个城市的 当前可见有效的辖区信息,包含子地区

· 获取某个城市的 某个关键词相关的搜索结果和结果数

·(单线程与多线程)搜索某个城市关于某个关键词的某个分类、子地区、排序方式的相关店铺并支持MongoDB存储和本地文件存储

· 获取某个商铺的评分、星级、地址、电话、点评数、人均消费、点评标签、点评种类等

· 获取某个商铺的加密点评信息,支持条数设定

环境

使用环境:

win 7 64bits

pycharm

python3

第三方库:

bs4 >=0.0.1

lxml >=4.2.5

pymongo >=3.7.1

requests >=2.19.1

使用前

因为大众点评的反爬措施,需要设置IP代理以及随机切换可用的User-Agent来进行大量数据的爬取

IP代理(Proxy)

如何设置?config.py中有详细的各个代理设置注释,建议使用PROXY_POOL进行IP代理,可以使用一次一个的接口来获取代理IP。

UA池

user-agent可以使用settings.py中的UA池,如果你有更多的可用UA,可以自己加进去或者替换掉。

用户cookie

如果你需要爬取加密的商铺点评数据(页数>1),则需要添加点评用户的登陆cookie到config.py的COOKIE中。具体内容为一个字符串,如:

'_lxsdk_cuid=1681d897b62c8;_hc.v=ff4f63f6;thirdtoken=c9792'之类的。可以在浏览器调试界面获得。

数据库存储(MongoDB)与本地存储

如果需要存储搜索的店铺数据,则需要到config.py中设置MongoDB的数据库设置(本地存储可以在城市搜索api中设置保存本地的路径。),其中

· 'database'为默认使用的数据库,

· 'records'为记录抓取的数据表名,

· 'searchDB'为搜索结果存放的数据库

其他相关的配置可以参见config.py 中的设置注解

使用

获取大众点评当前可以查询查看到店铺的所有已激活城市信息

返回结果 cities 为大众点评全国可以显示搜索到店铺的激活城市列表:

获取大众点评里所有省市直辖市的provinceId以及地区areaId

返回结果 provinces 为全国的省、直辖市的ID信息:

根据给定的中文城市、地区名称来获取其大众点评首页链接

返回结果 url 为北京市的大众点评首页:

获取某个城市的 当前可见有效的辖区信息,包含子地区

返回结果 locations 为当前城市的所有子地区信息:

通过id获取城市的某个地区名称

返回结果 someplace 为北京地区的对应id的子地区名称:

通过id获取地区内的所有子地区信息

返回结果 sub_regions 为当前id下的所有子地区id列表:

获取某个城市的 热搜关键词

返回结果 hot 为当前城市“北京”的热搜词汇列表(包含其所属分类id等信息):

获取某个城市的 当前可见有效店铺分类

返回结果 category 为该城市所有的店铺分类信息列表:

获取某个城市的 某个关键词相关的搜索结果和结果数

返回结果 relative 为北京市关键词“健身”相关的搜索词汇以及其对应结果数:

(单线程与多线程)搜索某个城市关于某个关键词的某个分类、子地区、排序方式的相关店铺并支持MongoDB存储和本地文件存储

单线程搜索下载相关店铺

下例为搜索下载北京市“海淀区”店铺分类为“运动健身”的“有团购”的与“器材”相关的所有店铺,搜索下载结果“按人气排序”,

save表示是否保存进MongoDB数据库,details表示是否抓取店铺的详细信息。具体参数可见search函数注释。

返回结果 results 为搜索到的相关店铺,具体内容,单个店铺的MongoDB数据库显示:

多线程搜索下载相关店铺

多线程搜索与单线程搜索流程一致,只是搜索线程多开了而已,线程数为搜索结果的页数,最多为50个(大众点评目前单页最多个数)。启用多线程的话,由于使用代理IP,有可能同时

获取的代理多个线程都是同一个,所以在config.py加入了RANDOM_INTERVAL(随机等待间隔)防止多个线程使用同一个代理被封。

获取某个商铺的评分、星级、地址、电话、点评数、人均消费、点评标签、点评种类等

下例以获取id为507576的店铺信息为例

返回结果 :

获取下载保存某个商铺的加密点评信息,支持条数设定

获取点评需要使用cookie,具体使用参见“使用前”,默认保存数据进入数据库,具体的参数详情参见get_reviews函数注释。下例以获取店铺id为 507576 的商铺以第2页为起点的 300条加密点评为例:

结果已经被存储在数据库中,MongoDB数据库中的单条点评数据内容具体为:

ToDo

如果想要抓取多个商铺的点评数据,可以使用多个账户+多代理+UA池来绕过反爬

尝试使用selenium对爬取点评数据进行验证码滑动验证

使用手机接码平台注册多个账户进行模拟登陆后获取cookie进行爬取点评数据

推荐↓↓↓

万水千山总是情,点个 “好看” 行不行

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190130B133EJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券