全网最最详细携程旅行景点百万级数据爬取! 免费开源!!!!!

源码下载链接:

原版:

链接: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元额度,注册网站流程如下:

极客|ip代理icon-default.png?t=O83Ahttps://nc.jikip.com/user/extractapi

点击上述网址进入后:

  • 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

五、楼主的废话

希望大家在使用代码的同时可以共享一下各自爬取的数据,有问题或者不会用的可以加我,我教你代码怎么用。

联系方式在主页(没有的话就私信我)

内容仅供学习参考。

### 使用 Selenium 爬取携程景点评论数据 以下是实现通过 Selenium 爬取携程景点评论的具体方法和代码示例: #### 导入必要的库 为了完成此任务,需要导入 `selenium` 和其他辅助库来解析网页内容并提取所需的数据。 ```python import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ``` #### 初始化 WebDriver 驱动程序 在此部分,初始化浏览器驱动器以加载目标页面。这里假设使用的是 Chrome 浏览器及其对应的驱动器。 ```python chrome_service = ChromeService(executable_path="path/to/chromedriver") # 替换为实际路径 driver = webdriver.Chrome(service=chrome_service) url = "https://you.ctrip.com/sight/enshi487/51386.html#ctm_ref=www_hp_his_lst" driver.get(url) time.sleep(3) # 等待页面完全加载 ``` #### 定位评论区域并滚动加载更多评论 由于携程网站上的评论通常会随着用户的下拉操作动态加载,因此可以通过模拟滚动行为触发更多的评论显示出来。 ```python def scroll_to_bottom(driver, pause_time=2): last_height = driver.execute_script("return document.body.scrollHeight") while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(pause_time) new_height = driver.execute_script("return document.body.scrollHeight") if new_height == last_height: break last_height = new_height scroll_to_bottom(driver) ``` #### 提取评论信息 一旦页面中的所有评论都已加载完毕,则可以定位到具体的 HTML 元素位置,并从中抽取所需的字段(如用户名、评分以及具体内容等)。 ```python comments_section_xpath = "//div[@class='comment-item']" try: comments_elements = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.XPATH, comments_section_xpath)) ) except Exception as e: print(f"Error occurred during waiting for elements: {e}") driver.quit() exit() for comment_element in comments_elements: username = comment_element.find_element(By.CLASS_NAME, 'name').text.strip() or None rating = int(comment_element.find_element(By.CLASS_NAME, 'score').get_attribute('innerText')) if \ comment_element.find_elements(By.CLASS_NAME, 'score') else None content = comment_element.find_element(By.CLASS_NAME, 'content').text.strip() or None print({"username": username, "rating": rating, "content": content}) ``` 以上代码片段展示了如何利用 Selenium 来抓取携程网上特定景区的用户评价详情[^1]。需要注意的是,在运行脚本之前,请确认安装好对应版本的浏览器驱动文件,并调整其存储目录至变量 `"path/to/chromedriver"` 中指定的位置;另外考虑到反爬机制的存在,可能还需要加入额外处理逻辑比如设置随机等待时间或者更换 User-Agent 请求头等方式规避检测风险[^2]。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值