世界那么大,我想去看看。相信每到暑假期间,就会有很多人都想去旅游。但是去哪里玩,没有攻略这又是个问题。这次作者给大家带来的是爬取去哪网自由行数据。先来讲解一下大概思路,我们去一个城市旅行必定有一个出发地,然后有一个目的地,再然后我们就会搜寻当地的名胜然后选择一条路线。这个就是我们旅行开始之前的准备过程。没有这些,我们的旅行就不能开始。所以这次这个案例的目的就是获取去哪儿网上所有自由行的出发城市,然后获取该出发城市能到达的城市,再获得该目的城市所有的旅行产品。好了,是不是很简单。有了大体的思路,再去实现一个源码就不是难事了。作者在这里用的是Python来实现的,用的库为request库,将数据抓取下后再保存到MongoDB数据库。我们先看一下抓取后的结果。

控制台输出结果

保存到MongoDB数据库,目前数据库有5万多条自由行数据。

1.访问站点解析数据

此次我们访问去哪儿站点的url为“http://touch.qunar.com”这个网址是去哪儿的移动端,因为它返回的数据是JSON格式,JSON格式数据比较容易处理,所以我们以后在数据采集的时候,可以优先选择JSON数据。我们用浏览器访问该URL,然后选择自由行这一栏。如下图所示。

我们单击左侧的出发地站点,如下图所示。

打开开发者工具,选中XHR,我们可以从源码中看到全国各个出发地站点根据字母排序。如下图所示。

然后切换到Headers页面,观察Request URL和Request Method。如下图所示。

此时的目标URL为"https://touch.dujia.qunar.com/depCities.qunar"。

我们再点击自由行的搜索框,从这里我们可以搜索我们想去的城市。

我们可以从开发者工具中Headers中看到一个请求链接,其中“dep”表示我们出发的城市,由于服务器不能识别中文字符,所以“dep”后面是经某种编码方式编译后才提交给服务器的。这也就是我们看到的一串文字,所以我们可以通过更改dep的值来选择任意一个城市作为我们的出发地。

我们随机选择一个想去的城市,小编在这里选择的是丽江,打开开发者工具。

我们可以看到其中的请求链接为

"https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep=%E6%B7%B1%E5%9C%B3&query=%E4%B8%BD%E6%B1%9F%E8%87%AA%E7%94%B1%E8%A1%8C&dappDealTrace=false&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=FreetripTouchin&date=&configDepNew=&needNoResult=true&originalquery=%E4%B8%BD%E6%B1%9F%E8%87%AA%E7%94%B1%E8%A1%8C&limit=0,28&includeAD=true&qsact=search"。

其中"dep="后面是出发城市,"query="后面是目的城市,"originalquery="后面是目的城市。从这个链接我们可以获取到该自由行线路的所有产品,并且分析其JSON文件就可以获得自由行产品信息。到此我们我们已经获得了一条线路的所有产品了,那我们获取所有城市之间的自由行产品就很容易了。因为之前我们已经拿到了所有出发城市和目的城市的列表了。到此所有的分析都已经完成,我们可以用代码来实现了。

2.源码实现

3.结语

相信读者看到这里,已经了解了本篇爬虫的思路了,因为去哪儿网服务器后台有较强的识别爬虫的能力。代码中作者也给出了一些反反爬的策略。最简单的方式就是牺牲爬取的速度。如果不想牺牲速度可以加上ip代理池和cookie池或者采取一些其它的爬取策略,隔一段时间就换下ip和当前cookie的值。有兴趣的读者和想挑战下的读者可以尝试下。

本案例源码:

如果觉得好的话,可以在GitHub上给个Star。小编会在公众号每天分享一些好玩的爬虫和算法源码。

对爬虫,数据分析,算法感兴趣的朋友们,可以加微信公众号 TWcoding,我们一起玩转Python。

If it works for you.Please,star.

转载请注明出处,谢谢!

推荐阅读:先生:Python爬虫进阶之去哪儿酒店(国内外)​zhuanlan.zhihu.com先生:爬取今日头条NBA版块​zhuanlan.zhihu.com

自助者,天助之

python爬虫去哪儿网_大型爬虫案例:爬取去哪儿网相关推荐

  1. python爬虫入门练习,使用正则表达式和requests爬取LOL官网皮肤

    刚刚python入门,学会了requests模块爬取简单网页,然后写了个爬取LOL官网皮肤的爬虫,代码奉上 #获取json文件 #获取英雄ID列表 #拼接URL #下载皮肤 #导入re request ...

  2. python爬虫携程酒店_携程酒店爬取分享

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 import urllib.request from bs4 import BeautifulSoup import csv import re def ...

  3. Python爬虫模拟浏览器的headers、cookie,爬取淘宝网商品信息

    一. 淘宝商品信息定向爬虫 二. 爬虫基础:正则表达式 三. 淘宝页面查看与分析 四. 爬虫源码 一. 淘宝商品信息定向爬虫 注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一 ...

  4. python 批量下载网页图片_手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ /1 前言/ 上篇文章 手把手教你爬取天堂网1920*1080大图片(批量下载)--理论篇我们谈及了天堂网 ...

  5. 爬虫练手项目_酷狗音乐爬取

    酷狗音乐爬虫 前言 分析网站 第一步 第二步 第三步 第四步 准备爬虫 大体框架 获取signature 完整代码 前言 利用暑假闲暇时间学习了一下爬虫,也尝试了几个爬取图片的小项目,但感觉爬取图片有 ...

  6. python词云代码手机_【云计算】爬取淘宝手机品牌词云分析(python)

    本文主要向大家介绍了[云计算]爬取淘宝手机品牌词云分析(python),通过具体的内容向大家展现,希望对大家学习云计算有所帮助. 淘宝手机信息的爬取,请看这边博客(点击这里),然后我们利用其中保存的文 ...

  7. python中国最好大学排名_三分钟实现爬取中国前20大学排名

    一.中国大学排名爬虫案例的步骤如下: 步骤1:从网络上获取大学排名网页内容 getHTMLText() 步骤2:提取网页内容中信息到合适的数据结构 fillUnivList() 步骤3:利用数据结构展 ...

  8. 【爬虫实战】Python 自制天气预报程序!爬取全国天气网

    学会了爬虫,让我们自制一个天气预报的爬虫吧! 需求分析 1.用 requests 爬取 全国天气网 的网页源代码: 2.用 pyquery 解析网页源代码,取得天气情况信息的节点: 3.用 xlwt ...

  9. 【爬虫】用Python爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具)

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/det ...

最新文章

  1. DropdownList绑定的两种方法
  2. Access库的小问题
  3. Linux学习进阶!!
  4. 1982:【19CSPJ普及组】数字游戏 scratch C++
  5. 安兔兔发布9月份Android性能榜:855霸榜,华为竟垫底
  6. 游戏开发之测试篇2(C++)
  7. sklearn特征选择类库使用小结
  8. 微信-连接一切的力量
  9. 音乐相册android studio,手机音乐相册制作软件哪个好用?2018音乐相册制作软件推荐...
  10. ImagePicker 打开前置摄像头
  11. TP6使用守护进程完成队列任务
  12. linux调度不执行,linux crond.d定时调度执行一段时间后不执行
  13. unrecognized or represents more than one time zone
  14. 这是一篇理工男写的口红科普文
  15. 制作UEFI模式Ubuntu启动U盘
  16. word文档导航栏中的同级菜单不对齐
  17. 批量修改数据进行分批处理
  18. 机器视觉中的视觉引导定位系统_机器视觉在工业中的应用
  19. [全网最全]管培生群面合集(百度,京东,腾讯,大疆,网易,腾讯....)
  20. 动手做一台十分简单的机械按键收音机(RDA5807FP应用实例)

热门文章

  1. U-Boot 之五 详解 U-Boot 及 SPL 的启动流程
  2. STM32F10x之RCC
  3. IO-5(InputStreamReader、OutputStreamWriter、序列化流、反序列化流、Serializable、transient)
  4. oracle中判断空,Oracle中判断空游标的方法
  5. mysql 5.7 innodb 预热_mysql5.7 InnoDB数据表空间文件平滑迁移
  6. 为什么qt这么强大没人使用_就是这么强大!为什么火箭队能始终压制76人,巴特勒一语点破玄机...
  7. java字符排序规则_java 重写排序规则,用于代码层级排序
  8. java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...
  9. (一)为什么要UML
  10. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用