当前位置: 首页 > news >正文

大连指令数据集的创建--数据收集与预处理_02

1.去哪儿爬虫

  • 编程语言:Python
  • 爬虫框架:Selenium(用于浏览器自动化)
  • 解析库:BeautifulSoup(用于解析HTML)

2.爬虫策略

  • 目标网站:去哪儿(https://travel.qunar.com/travelbook/list.htm?order=hot_heat)
  • 目标数据:大连的旅游攻略
  • 流程概述
    1. 打开去哪儿旅游攻略并进行搜索。
    2. 提取搜索结果页面中旅游攻略的链接。
    3. 分别访问每个旅游攻略页面,提取内容并按照json格式保存到本地文件。

3.获取旅游攻略链接

3.1导入库

import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from bs4 import BeautifulSoup

3.2配置文件路径和ChromeDriver路径,根据自己的Chrome的chromedriver.exe的路径配置ChromeDriver路径,根据自己存放链接的位置配置文件路径

# 配置文件路径和ChromeDriver路径
file_path = 'D:\\Pycharm\\space\\Qunaer\\去哪儿大连链接.txt'//根据实际位置设置路径
chrome_driver_path = "D:\\chromedriver\\chromedriver.exe"//根据实际位置设置路径

3.3初始化Selenium WebDriver

s = Service(chrome_driver_path)
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(service=s, options=options)

3.4获取去哪儿大连的攻略链接,并存储在txt文档中。

# 打开去哪儿攻略页面
driver.get("https://travel.qunar.com/travelbook/list.htm?order=hot_heat")wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.XPATH, '/html/body/div[3]/div/div[2]/div[1]/div[1]/input[1]')))start_input = driver.find_element(By.XPATH, '/html/body/div[3]/div/div[2]/div[1]/div[1]/input[1]')
start_input.send_keys('大连')
time.sleep(1)
start_input = driver.find_element(By.CLASS_NAME, 'sub_btn')
start_input.click()
time.sleep(3)
soup = BeautifulSoup(driver.page_source, 'html.parser')
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'b_paging')))
paging_div = soup.find('div', class_='b_paging')
max_page = 0
if paging_div.text or paging_div.find_elements(By.TAG_NAME, 'a'):soup = BeautifulSoup(driver.page_source, 'html.parser')max_page = 0for a_tag in paging_div.find_all('a'):if 'data-beacon' in a_tag.attrs and a_tag['data-beacon'] == 'click_result_page':href = a_tag['href']page_number = int(href.split('/')[-1].split('.')[0])max_page = max(max_page, page_number)print(f"Maximum page number: {max_page} {href}")pattern = re.compile(r'(\d+)\.htm$')href = pattern.sub('', href)for i in range(max_page):link = "https:" + href + str(i+1) + ".htm"time.sleep(1)driver.get(link)soup = BeautifulSoup(driver.page_source, 'html.parser')wait = WebDriverWait(driver, 10)wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'list_item')))list_items = soup.find_all('li', {'class': 'list_item'})for item in list_items:data_url = item.get('data-url')if data_url:with open(file_path, 'a', encoding='utf-8') as file:file.write(data_url + '\n')else:print(f"No data-url found for this <li> element.")else:print("No <ul> element with class b_strategy_list found.")
else:print("The b_paging div is empty or doesn't contain any anchor tags.")

3.5运行结果:

4.获取并处理旅游攻略内容

4.1导入库

import json
import time
from datetime import datetime
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common import TimeoutException
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

4.2一个字典和三个函数的定义

先上代码,再分析定义函数的功能和作用。

chinese_months = {1: '一月',2: '二月',3: '三月',4: '四月',5: '五月',6: '六月',7: '七月',8: '八月',9: '九月',10: '十月',11: '十一月',12: '十二月'
}def remove_after_comment(text):index = text.find("【备注】")if index != -1:return text[:index]else:return textdef get_season(month):if 3 <= month <= 5:return '春天'elif 6 <= month <= 8:return '夏天'elif 9 <= month <= 11:return '秋天'else:return '冬天'def change(text):if '/' in text:try:date_obj = datetime.strptime(text, '%Y/%m/%d')month_name = chinese_months[date_obj.month]season = get_season(date_obj.month)result_list.append(f'{month_name}')result_list.append(f'{season}')except ValueError:passelif text.isdigit():if int(text) < 99:result_list.append(f'{text}天')else:result_list.append(f'{text}元')else:if text not in result_list:result_list.append(text)

以下是对这四个函数的详细解释和分析

 1. `chinese_months` 字典
功能:将公历月份(数字1-12)映射为中文月份名称。
作用:提供标准化的月份翻译,符合中文习惯。

2. `remove_after_comment` 函数
功能:删除文本中“【备注】”及其后的内容。
作用:清理数据中的注释信息,保留主文本。

3. `get_season` 函数
功能:根据月份返回对应季节。
作用:将月份映射为中文季节名称,符合中国常见的气象季节划分(3-5月为春,6-8月为夏等)。但需注意,中国幅员辽阔,实际季节可能因地而异,此处为通用逻辑。

 4. `change` 函数
功能:多条件文本转换器,处理日期、数字和其他文本。
作用:
(1)日期处理:识别形如 `YYYY/MM/DD` 的日期,提取中文月份和季节(依赖 `chinese_months` 和 `get_season`)。例如,输入 `"2025/02/25"` → 输出 `["二月", "冬天"]`。
(2)数字处理:
     - 小于99的数字添加“天”(如 `30` → `"30天"`,表示天数)。
     - 大于等于99的数字添加“元”(如 `100` → `"100元"`,表示金额)。
(3)其他文本:直接保留唯一值(去重)。

4.3配置文件路径和ChromeDriver路径,根据自己的Chrome的chromedriver.exe的路径配置ChromeDriver路径,根据自己存放链接的位置配置文件路径。

# 配置文件路径和ChromeDriver路径
file_path = 'D:\\Pycharm\\space\\Qunaer\\去哪儿大连链接.txt'  # 保存内容的文件路径
chrome_driver_path = "D:\\chromedriver\\chromedriver.exe"  # ChromeDriver路径

4.4初始化Selenium WebDriver

s = Service(chrome_driver_path)
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(service=s, options=options)

4.5打开3.5中生成的“去哪儿大连链接.txt”文件,获取链接,进一步处理,爬取大连旅游攻略内容。

with open(file_path, 'r') as file:for line in file:result_list = []line = line.strip()last_part = line.rsplit('/', 1)[-1]print(last_part)time.sleep(1)driver.get("https://travel.qunar.com/travelbook/note/" + last_part)driver.maximize_window()try:wait = WebDriverWait(driver, 10)wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'foreword_list')))except TimeoutException:continuesoup = BeautifulSoup(driver.page_source, 'html.parser')ul = soup.find('ul', {'class': 'foreword_list'})print(ul)soup1 = BeautifulSoup(str(ul), 'html.parser')data_elements = soup1.find_all('span', {'class': 'data'})for data_element in data_elements:for text in data_element.stripped_strings:change(text)inputxt = ''for r in result_list:inputxt += '#'inputxt += str(r)text_element = soup.find('div', class_='e_main')text_content = text_element.get_text(strip=True, separator='\n')data = {'instruction': inputxt,'summary': '','output': remove_after_comment(text_content)}with open('D:\\Pycharm\\space\\Qunaer\\去哪儿大连.json', 'a', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=4)file.write('\n')time.sleep(3)driver.quit()

4.6运行结果

4.7工程文件夹,有两个python文件,一个是3中的获取旅游攻略链接,一个是4中的获取并处理旅游攻略内容

相关文章:

大连指令数据集的创建--数据收集与预处理_02

1.去哪儿爬虫 编程语言&#xff1a;Python爬虫框架&#xff1a;Selenium&#xff08;用于浏览器自动化&#xff09;解析库&#xff1a;BeautifulSoup&#xff08;用于解析HTML&#xff09; 2.爬虫策略 目标网站&#xff1a;去哪儿&#xff08;https://travel.qunar.com/trav…...

xr-frame 3D Marker识别,扬州古牌坊 3D识别技术稳定调研

目录 识别物体规范 3D Marker 识别目标文件 map 生成 生成任务状态解析 服务耗时&#xff1a; 对传入的视频有如下要求&#xff1a; 对传入的视频建议&#xff1a; 识别物体规范 为提高Marker质量&#xff0c;保证算法识别效果&#xff0c;可参考Marker规范文档 Marker规…...

【网络安全 | 漏洞挖掘】利用文件上传功能的 IDOR 和 XSS 劫持会话

未经许可,不得转载。 本文涉及漏洞均已修复。 文章目录 前言正文前言 想象这样一个场景:一个专门处理敏感文档的平台,如保险理赔或身份验证系统,却因一个设计疏漏而成为攻击者的“金矿”。在对某个保险门户的文件上传功能进行测试时,我意外发现了一个可导致大规模账户接管…...

达梦数据库系列之安装及Mysql数据迁移

达梦数据库系列之安装及Mysql数据迁移 1. 达梦数据库1.1 简介1.2 Docker安装达梦1.2.1 默认密码查询1.2.2 docker启动指定密码 1.3 达梦数据库连接工具1.3.1 快捷键 2 Mysql数据库迁移至达梦2.1 使用SQLark进行数据迁移 1. 达梦数据库 1.1 简介 DM8是达梦公司在总结DM系列产品…...

FS800DTU联动OneNET平台数据可视化View

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件环境 2.3 硬件连接 3 注册OneNET云平台并建立物模型 3.1 参数获取 3.2 连接OneNET 3.3上报数据 4 数据可视化View 4.1 用户信息获取 4.2 启用数据可视化View 4.3 创建项目 4.4 编辑项目 4.5 新增数据源 4.6 数据过滤器配置 4.6 项…...

ffmpeg avdevice_register_all 注册设备的作用

在 FFmpeg 中&#xff0c;avdevice_register_all() 是一个用于注册所有输入和输出设备的函数。它是 FFmpeg 的 libavdevice 模块的一部分&#xff0c;专门用于处理音频和视频的输入/输出设备&#xff08;如摄像头、麦克风、屏幕捕获等&#xff09;。 以下是对 avdevice_regist…...

使用JS遍历JSON数组

在JavaScript中&#xff0c;遍历JSON对象或数组是一个常见的操作&#xff0c;尤其是在处理复杂数据结构时。这里有几种不同的方法可以根据你的需求进行遍历。 1. 遍历JSON对象 如果你有一个JSON对象&#xff08;实际上在JavaScript中&#xff0c;所有的对象都可以视为JSON对象…...

Go基于协程池的延迟任务调度器

原理 通过用一个goroutine以及堆来存储要待调度的延迟任务&#xff0c;当达到调度时间后&#xff0c;将其添加到协程池中去执行。 主要是使用了chan、Mutex、atomic及ants协程池来实现。 用途 主要是用于高并发及大量定时任务要处理的情况&#xff0c;如果使用Go协程来实现每…...

k8S通过代理将集群外的中间件引入集群内访问 —— 筑梦之路

背景说明 有部分中间件是跑在Kubernetes集群之外&#xff0c;我们希望通过service的方式来访问集群外的中间件&#xff0c;比如访问我们k8s集群外的elasticsearch集群。 ES节点本身又处在一个负载均衡IP&#xff1a;192.168.100.100 之后&#xff0c;但是代理的端口号是9202&am…...

Linux 第三次脚本作业

源码编译安装httpd 2.4&#xff0c;提供系统服务管理脚本并测试&#xff08;建议两种方法实现&#xff09; 一、第一种方法 1、把 httpd-2.4.63.tar.gz 这个安装包上传到你的试验机上 2、 安装编译工具 (俺之前已经装好了&#xff09; 3、解压httpd包 4、解压后的httpd包的文…...

使用通义万相Wan2.1进行视频生成

使用通义万相Wan2.1进行视频生成 源代码准备运行环境准备创建Python虚拟环境并激活安装依赖包 模型下载生成视频官网的视频生成例子简单描述场景视频生成示例详细描述场景视频生成示例 最近通义万相开源了其视频生成模型。模型有两个版本&#xff0c;一个是1.3B的&#xff0c;一…...

AI技术为旅行社打开新流量入口

2月28日消息&#xff0c;在“2025旅业发展高峰论坛”上&#xff0c;马蜂窝交易中心总经理绳志成在主题演讲中系统性阐述了AI技术对自由行市场的颠覆性影响。 绳志成介绍&#xff0c;传统“大而全”的跟团游产品吸引力持续走低&#xff0c;用户更愿意为“小众秘境”、“在地文化…...

SuperMap iClient3D for WebGL 影像数据可视范围控制

在共享同一影像底图的服务场景中&#xff0c;如何基于用户权限体系实现差异化的数据可视范围控制&#xff1f;SuperMap iClient3D for WebGL提供了自定义区域影像裁剪的方法。让我们一起看看吧&#xff01; 一、数据制作 对于上述视频中的地图制作&#xff0c;此处不做讲述&am…...

API网关相关知识点

目录 API网关基础知识总结 | JavaGuide Spring Cloud Gateway常见问题总结 | JavaGuide API网关 | 小傅哥 bugstack 虫洞栈 美团: 百亿规模API网关服务Shepherd的设计与实现 vivo: 微服务 API 网关架构实践 唯品会: 高吞吐消息网关的探索与思考 API网关基础知识总结 | J…...

Opencv 图像形态学操作

3.1 形态学-腐蚀操作 img cv2.imread(CSDN.png) cv2.imshow(CSDN, img) cv2.waitKey(0) cv2.destroyAllWindows如果腐蚀核的覆盖区域内的所有像素值都满足条件&#xff08;阈值&#xff09;&#xff0c;则中心像素的值保持不变&#xff1b;如果有任何像素值不满足条件&#x…...

Readability.js 与 Newspaper提取网页内容和元数据

在当今信息爆炸的时代&#xff0c;网页内容的提取和处理变得尤为重要。无论是从新闻网站、博客还是教程网站中提取内容&#xff0c;都需要一个高效、准确的工具来帮助我们去除无关信息&#xff0c;提取出有价值的正文内容。这不仅能够提高我们的工作效率&#xff0c;还能让我们…...

小程序Three Dof识别 实现景区AR体验

代码工程 GitCode - 全球开发者的开源社区,开源代码托管平台 dof...

腾讯2025年软件测试面试题

以下是基于腾讯等一线互联网公司软件测试岗位的面试趋势和技术要求,025年出现的软件测试面试题。这些问题涵盖了基础知识、自动化测试、性能测试、安全测试、编程能力等多个方面,供参考和准备。 一、基础知识 软件测试的基本概念...

SSL域名证书怎么续期?

在当今数字化时代&#xff0c;网站的安全性已成为企业和个人不可忽视的重要因素。SSL域名证书作为保障网站数据传输安全的关键工具&#xff0c;其重要性不言而喻。然而&#xff0c;SSL证书并非永久有效&#xff0c;它们通常有一个固定的有效期&#xff0c;到期后需要进行续期以…...

Grok3使用体验与模型版本对比分析

文章目录 Grok的功能DeepSearch思考功能绘画功能Grok 3的独特功能 Grok 3的版本和特点与其他AI模型的比较 最新新闻&#xff1a;Grok3被誉为“地球上最聪明的AI” 最近&#xff0c;xAI公司正式发布了Grok3&#xff0c;并宣称其在多项基准测试中展现了惊艳的表现。据官方消息&am…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...