python爬虫(上)–请求——关于旅游 站的酒店评论爬取(传参方法)

前言

最近考试一直都没有时间写这篇总结,现在考试暂告一段落,现在抽空出来写一篇总结,总结一下python爬虫的学习进度。

承接上一篇基于scrapy框架爬虫学习小结,上一篇主要是第二次作业后,“老师说会给我们时间继续完善这个作业,直到可以真的爬到微信朋友圈内容….”,其实之后前面半句是有,但是后面半句真的爬到朋友圈却没有了,老师改变了需求,我们变成了去爬一些旅游 站了。

我们被分派到的任务是:研究分析携程,艺龙,去哪儿,途牛和驴友的爬去规则分析以及爬取他们的酒店评论,我分配到的是携程和艺龙的酒店评论的爬取。

刚开始是我想用之前用过的scrapy来做这个爬取,但是不知道是不是我用的不太熟练,了解不深入,导致一些问题我自己没有办法处理,而且上 搜索的一些答案我都看不懂,之后我才直到,scrapy如果自己没有一定实力,排错很困难。

所以还是回到底层python爬虫实现,凡是要一步步来,因为如果我发现 上许多python爬虫都是用urllib,urllib2,bs4,Request等库来实现的,所以先抛开scrapy框架来,回归一些更加基础的爬虫相关库的学习。
(在进行下面之前请执行pip list查看自己是否已经安装了beautiful soup,lxml,Request和scrapy等第三方库,urllib,urllib2,re和json都是内置库不用考虑,如果没有上面四个第三方库,请用pip install之)

分析要爬取的 站

①携程

上面这个是携程酒店页,广度优先的话就是这一层先完成爬去每个酒店评论页的URL,携程酒店页长这样:

看到图中酒店评论(1423)没有,点开看看:

图中我们可以看到现在是评论的第二页,右边啥都没有,先点到Network,再选择筛选器,原来是【All】,现在换成【XHR】(大部分重新加载的AJAX在浏览器中都属于XHR类,当然有部分还可能在JS 类中),这样更加方便找出通过AJAX加载的更新数据,接下就刷新一下页面,让它重新加载第二页评论,结果如图:

我们也可以广度优先先爬去每个酒店的URL,不过这个先放着,我们先看看点进去每个酒店的评论页面,先分析一番,这里我们以上图中的广州珠江新城希尔顿欢朋酒店为例,下面就是点进去,点击点评,呈现出来长这样:

上图中是我通过分析评论加载过程得出的,中间省略了一些步骤。

P.s.强烈建议你花点时间琢磨一下如何利用开发者工具分析交互过程,这有助于你快速找出AJAX加载地址URL

详细的信息:

把General下的Request URL复制粘贴到浏览器地址栏,打开,会有这样的返回:

我们可以看到,这次AJAX请求的URL是:

hotelId是32001199和原本【http://hotel.elong.com/guangzhou/32001199/】 中的一样,所以我基本确定,这串数字就是每个酒店都有的编 。

知道这个又有什么意义知道了酒店有自己的酒店编 ,然后又知道了原来通过AJAX请求的URL中的hotelId是等于这个这个酒店编 的,那么我们可不可以只是通过修改这个hotelId来获取不同酒店的酒店评论呢是肯定的,我就不贴试验图了,你们可以自己做试验。

2.再回来看1里面的hotelId=91245064的那个AJAX地址:

我们发现pageIndex=1,学过英文的我们能猜到pageIndex应该就是指页码,对比一下这个URL打开的json中的评论和原页面中第一页的评论内容,发现一致,修改pageIndex=2,回车,发现重新加载,内容改变,再对比重新加载的json数据内容和原页面中第二页的评论内容,发现也是一致的,基本可以肯定pageIndex的值就是确定请求第几页的值的字段

3.通过上面两点对AJAX请求的URL地址的分析,我们知道了我们只要改变hotelId和pageIndex的值就可以请求完艺龙内所有酒店的评论数据,不过如果要用程序实现,我们还需要直到所有的hotelId和每一个酒店内评论最大页面数量

程序实现

1.第一步要做的是获取全部酒店hotelId
(凡事都得小范围试验先,所以还是先拿广州开刀,试着抓第一页全部的酒店编 )

以下为输出结果为第一页的全部酒店编 ,以及URL路径:

免责声明

本篇文章只是为了分享技术和共同学习为目的,并不出于商业目的和用途,也不希望用于商业用途,特此声明。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树 络爬虫urllib211385 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年6月1日
下一篇 2016年6月1日

相关推荐