源码下载链接:
原版:
链接:https://pan.baidu.com/s/1_rdteU3cSdLOXCYqS-h7Zg?pwd=9m4m
提取码:9m4m
代理IP版本(需要看完本文章才能使用):
链接:https://pan.baidu.com/s/1MMWGgzqVNwVuqHriKfSP0A?pwd=6723
提取码:6723
一、功能解析
1.数据展示
1)数据有 景区id、区域名称 、景区评论得分 、景区星级 、景区展示图片 、景区标签 、景区门票价格 、景区是否免费 、景区特点描述 、该景区上榜的榜单 、景区纬度 、景区经度 、景区热度 、景区地址 、联系电话 、开放时间 、介绍 、优待政策 、服务设施。
2)爬取数据如下图1.1所示(这是一个城市的部分数据):
图1.1
2.爬取城市id
1)该代码可以爬取 全国任意城市 的所有景点数据,总数可达几百万数据量,城市id和城市name有对应的爬取代码,运行crawlingCityId.py文件会将城市id数据存储到helper/file层级下,提供的源码中有城市id数据的,无需爬取。
2)运行crawlingCityId.py如图2.1所示:
输入^(shift+6)可以暂停代码,系统会记录爬取进度,想继续爬取可以选择2选项。
图2.1
3)下图2.2为城市id存储数据(共2227个城市):
图2.2
3.代码架构
代码架构如下图3.1所示,下载好的代码先使用pip命令自行安装好所需的库,然后运行main.py文件即可开始爬取数据,爬取的数据会存储在data文件夹下。
4.爬取景区数据
1)运行main.py文件后有多种选择,如图4.1所示:
- 选项1:从城市id存储文件cities.csv中读取第一个城市开始爬取
- 选项2:读取异常进度继续爬取
- 选项3:自定义起始城市开始爬取
- 选项4:单独爬取某个城市的数据
- 选项5:退出系统
代码具有随时暂停的功能(按下^键)和自动记录请求异常情况的功能(系统会自动记录上次结束代码的进度或请求异常时进度)
图4.1
2)爬取景区数据时如图4.2所示:
图4.2
5.更换cookie
1)代码下载下来之后强烈建议去settings文件里面把self.cookie变量换一下(更换自己的cookie可以减少被封的可能),按照如图所示的链接,然后找到对应的请求,把请求标头中的cookie拿出来到代码中替换:
二、代码解析
1.settings.py
1)settings.py为配置文件,没有实质性作用,不可运行,但是里面包含了一些参数可以进行修改,如下图1.1所示:
比较重要的要两个参数(作用见图片中注解):
- self.voluntarily
- self.max_page:修改爬取每个景区的页数,每页有10条景区数据。
图1.1
2)如果想新增文件列名的话在settings.py中__init__函数中找到对应的文件列配置,如下图1.2所示,按照数字顺序添加键值对,还需要在给该文件传入数据的地方添加实参,如图1.3所示:
图1.2
图1.3
2.handFile.py文件
1)一个小工具文件,因为手动去修改文件的话可能导致文件乱码的情况,所以写了个小工具去处理文件,运行后如下图2.1所示。
文件很多参数需要去手动修改,一般也不会用到这个文件,这个主要是我写给自己用的[dog],修改参数在run函数中修改,如图2.2所示。
图2.1
图2.2
3.getIp.py
只有代理IP版本才有该文件,功能性文件,被调用的,无需运行;
如果你运行了那就是花你自己极客代理的账号去获取了个代理IP(是花钱的)。
三、代理IP版本
携程的反爬措施有:
①封IP(封一个小时左右,IP被封的象征为error文件中e的值是"432 Client Error")
②滑块验证(需要在页面完成图形验证,象征为error文件中e的值是"景区详情页面返回数据为None",我研究了一下携程滑块的原理,获取图片链接的请求有两个加密的参数,但是我js逆向并不是很好,解不出来,所以使用代理IP法解决滑块验证,如果有js逆向大佬可以联系我研究一下)
使用代理IP可以解决以上两个问题,如果对数据量要求不大用原版就可以了。
1.注册某代理IP网站
1)IP被封当然是使用代理IP啦,该代理网站可以免费提供10元额度,注册网站流程如下:
点击上述网址进入后:
-
1.使用手机号注册
-
2.完成身份认证,如图1.1所示(必须认证,不然获取不到代理IP)
-
3.将本机IP添加进白名单,按照下图1.2将IP添加进白名单,这样你才能使用该电脑去获取到代理IP,同理,你其他电脑要是想使用代理IP也需要将电脑IP添加进白名单,不然代码会报错。(必须)
图1.1
图1.2
2.更换代码中参数(必须)
在getIp.py文件中更换两个参数:
1)更换ID
将代码中的ID换成自己的ID,不然获取不到代理IP,操作步骤如图2.1、2.2所示
图2.1
图2.2
2)F12或者右键检查来打开开发者工具,然后点击应用程序(Application),将token的值复制出来,去到代码中更换token,如下图2.3、2.4所示,注意Token有效期为7天,当提示token过期的话记得更换。
图2.3
图2.4
3.代理IP版本源码
链接:https://pan.baidu.com/s/1MMWGgzqVNwVuqHriKfSP0A?pwd=6723
提取码:6723
四、网友反馈的小问题
1.有的城市文件打开之后乱码
原因是数据中有特殊表情之类的,导致utf-8编码格式不能正常显示,解决方案如下:
1)右键该城市文件,打开方式选择记事本。
2)在记事本中点击文件 -> 点击另存为,然后保存类型选择所有文件,编码选择带有 BOM的 UTF-8,最后将新的csv文件替换原来的csv文件即可,如图1.1所示。
图1.1
五、楼主的废话
希望大家在使用代码的同时可以共享一下各自爬取的数据,有问题或者不会用的可以加我,我教你代码怎么用。
联系方式在主页(没有的话就私信我)
内容仅供学习参考。