由于在工作中,客户需要大众点评的行业数据,因此本人使用Python对大众点评网站进行了爬取,虽然在爬取之前就想好了可能会遇到的坑,但是没想要从坑中爬出来这么难。本次大众点评爬虫代码编写耗时一个月。也算是我目前遇到的爬取难度最高的网站。由于我遇到的坑很多同行业踩过,因此我就讲写的好的同行的内容直接引用了。如果有需要帮忙爬取大众点评商户数据的可以联系我,qq 704329038。
大众点评网站的第一个坑。显示数量有限。大众点评只显示前50页的内容,这也是为了反爬,为了获取全部的内容,采取组合美食分类和区域id的方式,这样基本上就可以限制页数小于50。
(转自https://blog.csdn.net/Tracy_LeBron/article/details/95199012)
url类似这种:
http://www.dianping.com/shenzhen/ch10/g117r1949
其中g117代表美食分类,r1949代表区域id。
先获取大众点评的美食分类的标签
按照行政区获取各区域的id
将美食分类和区域组合就可以获取到该链接下的shopid。
这里获取到所有的shopid之后,我尝试进行了店铺详情的爬取,在成功爬取几个店铺详情页后,楼主的IP就被封了(大概封了2周的时间),果断采用代理的方式,但是发现开源的代理中本来就没有几个能 用的ip,而一个ip在爬取2页面差不多就要被封了,这样导致效率非常低。这个时候想到爬取移动端(APP)的数据。在进行一番验证后,发现shopid在网页端和移动端是一致的。爬取移动端的数据,代理ip的有效时间会好很多。最后就果断采取爬取app端的数据。
说明下:我也尝试了使用自动化测试框架selenium去模拟人为操作,但是大众点评可以识别出selenium框架,直接就进入到了验证中心,输入验证码后仍然会报服务拒绝。 就果断弃之(貌似有阉割版的浏览器驱动,可以跳过大众点评的验证)。
大众点评网站的第二个坑。页面数据内容加密。可以看到,在图中通过直接查看html代码发现,无法直接获取。
关于如果应对大众点评的字体反爬,大家可以参考一下几篇博客。
https://www.jianshu.com/p/cc3dee3b5373
https://blog.csdn.net/Tracy_LeBron/article/details/95199012
大众点评网站的第三个坑。封禁ip。对于封禁ip的应对方法主要的就是设置ip池,大家可以参考下面这篇博客。
https://jiyinqin.com/2019/02/26/Python%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E4%B9%8B%E5%A4%A7%E4%BC%97%E7%82%B9%E8%AF%84
以下是本人爬取到的数据效果
店铺名 | 电话 | 店铺id |
饕林餐厅(春熙路店) | 028-62670108 028-62670278 | G41gaJfqGBICtiVY |
马旺子·川小馆(太古里店) | 028-64231923 | ivbjaqnpAdOCsiY4 |
拂晓(中粮鸿云悦街店) | 028-86536888 19182072589 | k3xc1G7qSuDIk7i2 |
御苑精品川菜馆 |