手把手用Python网络爬虫带你爬取全国著名高校附近酒店评论
/1 前言/
简介:本文介绍如何用python爬取全国著名高校附近的酒店点评,并进行分析,带大家看看著名高校附近的酒店怎么样。
/2 具体实现/
具体的实现主要是分为三步,具体的操作过程如下。
一、抓取高校附近的酒店信息
由于电脑客户端的美团酒店没有评论信息,于是我从手机端的网页入手,网页地址为:https://i.meituan.com/awp/h5/hotel/search/search.html
通过搜索北京大学附近的酒店,抓包找到了返回酒店json信息的url。
其中,limit代表返回酒店的最大数量(经测试,limit最大为50),offset为每次返回酒店数量的起点,cityId为城市的标志,在网页信息中可以找到,时间参数可以修改,sort为返回酒店信息的排序,sort=distance代表按距离搜索,q和keyword都是大学名称。
返回的数据如下图所示:
包含酒店的名字、地理位置、评分、realPoiId(相当于酒店的身份证号,后面爬评论用的到)、酒店和大学的距离等信息。 下面我们开始爬排名前10高校附近的酒店信息(不要在乎大学排名,我乱找的,以学习为主):
(图片来源于网络)
部分代码如下图所示:
其中cityId和大学名字为控制变量,通过返回的距离信息将酒店位置控制在2000米以内,输出结果为:
看看这10所大学2000米附近附近有多少家酒店:
我们可以发现,南京大学附近酒店最多,有453家;上海交通大学闵行校区附近酒店最少,有75家。
二、抓取每家酒店的点评信息
这个从这个url可以返回每家酒店的评论数量,poiId是酒店的“身份证号”。
这个url可以返回酒店的所有评论信息,其中limit为返回的评论数量,可以直接用上个url返回的评论数量,一次全部以json格式返回,非常方便,返回结果如下:
三、遇到的坑
1.刚开始爬评论是1次返回15个,后来发现可以Limit可以为评论的最大值,但是第一步返回的酒店信息中包含酒店评论数量是不准确的,要用第二步的方法;
2.评论中乱七八糟的表情、符号也是大坑,去了好久也去不干净;
3.最好用代理IP地址爬,否则评论太多,会被封。
/3 结语/
本文基于Python网络爬虫,抓取了高校旁边的酒店数量及其评论数量,如果你想抓取其他地方的其他信息,也是可行的,可以纵向拓展。
欢迎大家尝试,消耗在家的无聊时间。本文涉及的代码都上传到了github地址上,后台回复“高校酒店”四个字即可获取代码。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
escape in ABAP and JavaScript
ABAP IF_HTTP_UTILITY~ESCAPE_URL JavaScript 开源的sanitizer库,Google搞的。 https://www.npmjs.com/package/sanitizersanitizer.escape('your dirty string');用于C4C: 在Java里使用这个JS library: public class CajaSanitiser { private final ScriptEngine engine; private final Bindings bindings; public CajaSanitiser() throws IOException, ScriptException { this.engine = new ScriptEngineManager().getEngineByName("js"); this.bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); String scriptName = "com/google/caja/plugi...
- 下一篇
从排序算法到TopK问题
一、前言 排序算法大家都很熟悉了,解法多种多样。有一个问题和排序算法很相近,TopK问题:从N个数中选出最大的K个数,N通常远大于K。总结了一些解法,供大家参考。 二、冒泡 private static float[] pickTopKByBubbleSort(float[] a, int k) { int n = a.length; for (int i = 0; i < k; i++) { for (int j = 0; j < n - i - 1; j++) { if (a[j] > a[j + 1]) { float t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } float[] r = new float[k]; for (int i = 0; i < k; i++) { r[i] = a[n - i - 1]; } return r; } 冒泡排序的要义在于:外循环为排序趟数,内循环为每趟比较的次数,每趟得到一个最大的数,放到这一趟的末端。如果是全数组排序的话,复杂度为O(n^2), 如果只选TopK的话...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6