记一次对美团餐饮商家的信息爬取

人生苦短,我用 Python。

Life is short, I use Python.

本次将对【常州美食】全部美食推荐 进行一次爬虫实践,主要想爬取的信息有:

1.餐厅的名称

2.餐厅的评分

3.餐厅评论数

4.餐厅的地址

5.人均消费价格

确定了以上信息后,开始爬一个先试试是什么样子的。先用 xpath 试试。

果然碰到了403。

美团看来使用了反爬虫机制,必须要模拟浏览器来进行爬取。

先看下浏览器的 Headers

经过几次尝试,发现只对 Cookie 和 User-Agent 进行校验。

哈哈,成功抓取到网页了。 不过看起来网页结构和之前我们设置的 xpath不太一样。看来只能使用正则表达式了。

关于正则表达式的学习,推荐使用在线的正则表达式工具,可以很方便的进行调试

省略一万字后,得到正则表达式:

很显然这是个新手写的,但是并没有办法,第一次用,硬着头皮写了这么复杂。

虽有看起来很乱其实很管用,也很好理解。

最终我如愿爬到了我的第一组数据

收集到这里已经结束了吗?是的,你猜对了结束了。

不过这样结束有点无聊,太敷衍了。

再翻页搜集下把常州全部餐饮全爬下来吧。

好的。

先看看网页是怎么翻页的

第一页: http://cz.meituan.com/meishi/pn1/

第二页: http://cz.meituan.com/meishi/pn2/

第三页: http://cz.meituan.com/meishi/pn3/

看来还是相当爬虫友好的,没有很复杂混乱的运算来迷惑

那就翻页爬吧

没想到这么轻松就全下来了,想着又快结束,感觉还是很无聊啊。

再搞点事情吧,发现之前获取的商家信息里没有电话号码的信息。找找看也一起爬下来吧。

原来电话在这里,顺便把营业时间也爬下来吧。

观察了一下网页链接发现后面的数字就是我们爬下来的数据中的 poiId 的这个

这样我们就可以根据,poiId 来爬取电话和营业时间啦。

打包写个函数

还是轻松成功获取到了所有的电话和营业信息。

但是好景不长,在爬取到一半的时候,又被403了。

而且现在浏览器打开也被403了。

试了下 Firefox 和 Chrome 也都挂了。

很明显了我的 Cookie 里面的信息被服务器拉黑了。看看 Cookie 里到底有什么信息。

因为被封了,我们只能用无痕方式来访问了

看了下,决定采用多个 Cookie 然后随机调用的方式来避免被封了。

最后搞了17个 Cookie

观察这个 Cookies 发现里面竟然有定位信息,哈哈。 果断修改了,17个不同的定位。

最后在用随机函数的方式,随机使用 Cookie。

经测试,可以很高速的爬取数据而且不会被封啦。

最终,用 csv进行了一下简单的数据保存。

这次有趣的探索终于结束啦。

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励