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

大连本地知识库的搭建--数据收集与预处理_01

1.马蜂窝爬虫

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

2.爬虫策略

  • 目标网站:马蜂窝(https://www.mafengwo.cn/)
  • 目标数据:大连的攻略和游记
  • 流程概述
    1. 打开马蜂窝首页并进行搜索。
    2. 提取搜索结果页面中的攻略和游记链接。
    3. 分别访问每个攻略和游记页面,提取内容并保存到本地文件。

3.导入的库

import randomimport timefrom bs4 import BeautifulSoupfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport os

4.配置文件路径和ChromeDriver路径,下载对应Chrome浏览器版本的chromedriver.exe文件

file_path = 'D:\\Pycharm\\space\\Mafengwo\\mafengwo_01.txt'  # 保存内容的文件路径chrome_driver_path = "D:\\chromedriver\\chromedriver.exe"  # ChromeDriver路径

5.为了防止爬取的时候出现中断,采取get_links(file_path)函数从文件中读取已爬取的链接来解决中途爬取中断的问题,从而在上次中断的位置继续爬取。

def get_links(file_path):"""从文件中读取已爬取的链接"""if not os.path.exists(file_path):return set()with open(file_path, 'r', encoding='utf-8') as f:links = f.read().splitlines()return set(links)def save_link(file_path, link):"""将链接保存到文件"""with open(file_path, 'a', encoding='utf-8') as f:f.write(link + '\n')# 已爬取的链接文件already_crawled_file = 'already_crawled_01.txt'

6.初始化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)

7.打开马蜂窝网站并搜索“大连”,crawl_category()函数获取攻略和游记的链接,crawl_content()函数爬取指定链接的内容,crawl_content()设计了防止网页内容爬取不完整的情况出现和反爬虫机制的情况出现,采用滚轮的方式处理,滚动次数和等待页面加载时间可以根据实际情况来进行调整,最后获得爬取攻略和游记内容。

"""4. 打开马蜂窝网站并搜索“大连”"""driver.get("https://www.mafengwo.cn/")driver.maximize_window()wait = WebDriverWait(driver, 10)wait.until(EC.visibility_of_element_located((By.ID, '_j_index_search_input_all')))start_input = driver.find_element(By.ID, '_j_index_search_input_all')start_input.send_keys('大连')search_button = driver.find_element(By.ID, '_j_index_search_btn_all')search_button.click()time.sleep(random.randint(0, 3))"""5. 获取攻略和游记的链接"""def crawl_category(category_link):"""爬取指定分类下的攻略或游记链接"""driver.get(category_link)wait = WebDriverWait(driver, 10)wait.until(EC.visibility_of_element_located((By.ID, '_j_search_result_left')))outer_div = driver.find_element(By.ID, '_j_search_result_left')a_elements = outer_div.find_elements(By.XPATH, './/div[@class="flt1"]/a')hrefs = [a_element.get_attribute('href') for a_element in a_elements]already_crawled = get_links(already_crawled_file)for href in hrefs:if href not in already_crawled:save_link(already_crawled_file, href)crawl_content(href)def crawl_content(link):"""爬取指定链接的内容"""driver.get(link)wait = WebDriverWait(driver, 10)# 滚动页面加载更多内容for _ in range(7):  # 滚动次数,根据实际情况调整driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(random.randint(1, 3))  # 等待页面加载if "gl" in link:wait.until(EC.visibility_of_element_located((By.CLASS_NAME, 'sideL')))soup = BeautifulSoup(driver.page_source, 'html.parser')content_box = soup.find('div', class_='sideL')else:wait.until(EC.visibility_of_element_located((By.CLASS_NAME, '_j_content_box')))soup = BeautifulSoup(driver.page_source, 'html.parser')content_box = soup.find(class_="_j_content_box")all_text = ' '.join(content_box.stripped_strings)with open(file_path, 'a', encoding='utf-8') as file:file.write(all_text + '\n')time.sleep(random.randint(0, 3))# 获取攻略和游记的链接element = driver.find_element(By.XPATH, '//*[@id="_j_mfw_search_main"]/div[1]/div/div/a[3]')notes = element.get_attribute('href')element = driver.find_element(By.XPATH, '//*[@id="_j_mfw_search_main"]/div[1]/div/div/a[4]')guides = element.get_attribute('href')# 爬取攻略和游记内容crawl_category(guides)crawl_category(notes)driver.quit()

8.结果展示:

相关文章:

大连本地知识库的搭建--数据收集与预处理_01

1.马蜂窝爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:马蜂窝(https://www.mafengwo.cn/&…...

github 推送的常见问题以及解决

文章目录 git add 的时候问题1为什么会发生这种情况?Git 的警告含义如何解决?1. **保持 Git 的默认行为(推荐)**2. **禁用自动转换**3. **仅在工作目录中禁用转换**4. **统一使用 LF(跨平台开发推荐)** git…...

stm32单片机个人学习笔记16(SPI通信协议)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…...

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…...

BGP状态和机制

BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…...

温湿度监控设备融入智慧物联网

当医院的温湿度监控设备融入智慧物联网,将会带来许多新的体验,可以帮助医院温湿度监控设备智能化管理,实现设备之间的互联互通,方便医院对温湿度数据进行统一管理和分析。 添加智慧物联网技术,实现对医院温湿度的实时…...

smolagents学习笔记系列(五)Tools-in-depth-guide

这篇文章锁定官网教程中的 Tools-in-depth-guide 章节,主要介绍了如何详细构造自己的Tools,在之前的博文 smolagents学习笔记系列(二)Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具&…...

前端面试真题 2025最新版

文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性:Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss,有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…...

10. docker nginx官方镜像使用方法

本文介绍docker nginx官方镜像使用方法,因为第一次用,在加上对docker也不是很熟,中间踩了一些坑,为了避免下一次用又踩坑,因此记录如下,也希望能够帮到其它小伙伴。 官方镜像页面:https://hub.d…...

[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例

关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中,unserialize() 接收的值可控。 0x01:环境搭建 这里笔者是使用 PhpStudy 搭建的环…...

es-head(es库-谷歌浏览器插件)

1.下载es-head插件压缩包,并解压缩 2.谷歌浏览器添加插件 3.使用...

第二十:【路由的props配置】

作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件) {name:xiang,path:detail/:id/:title/:content,component:Detail, ​ 第一种方法:// props的对象写法,作用:把对象中的每一组key-valu…...

Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面

引言 在移动端H5开发中,全屏滚动效果因其沉浸式体验而广受欢迎。如何快速实现带有动态加载动画的全屏滚动页面?本文将手把手教你使用 Vue 2、全屏滚动插件 fullpage-vue 和动画库 animate.css 3.5.1,打造一个高效且视觉冲击力强的H5页面。通…...

AF3 DataPipeline类process_pdb 方法解读

DataPipeline 类中的 process_pdb 方法用于从 PDB 文件中生成特定蛋白质链的特征,作为 AlphaFold3 预测的输入。它的流程与 process_mmcif 类似,但输入来源是 PDB 文件而非 MmcifObject。 源代码: def process_pdb(self,pdb_path: str,alignment_dir: str,is_distillation:…...

抓包工具 wireshark

1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...

OpenBMC:BmcWeb app获取socket

OpenBMC:BmcWeb app.run-CSDN博客 app对象在run函数中调用了setupSocket() static std::vector<Acceptor> setupSocket() {std::vector<Acceptor> acceptors;char** names = nullptr;int listenFdCount = sd_listen_fds_with_names(0, &names);BMCWEB_LOG_DE…...

《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进

以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析&#xff0c;并增加数据探索环节&#xff0c;同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图&#xff0c;方便对比。 《深度学习实战》第…...

nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典

向 doubao.com/chat/ 提问&#xff1a; node.js js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;编写在线查询英汉词典 后端部分&#xff08;express js-mdict &#xff09; 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1…...

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件&#xff0c;并通过grep查找包含特定字符串的文件&#xf…...

如何快速将GitHub Desktop变成中文版:3分钟搞定界面汉化

如何快速将GitHub Desktop变成中文版&#xff1a;3分钟搞定界面汉化 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Deskt…...

Burpsuite之暴力破解+验证码识别 | 添柴不加火凸

springboot自动配置 自动配置了大量组件&#xff0c;配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后&#xff0c;springboot会根据类路径上的jar包来自动配置bean&#xff08;比如&#xff1a;springboot发现类路径上的MyBatis相关类&#xff…...

毕业季求生指南:如何用AI告别论文写作的“至暗时刻”?

凌晨三点的图书馆&#xff0c;咖啡杯堆成小山&#xff0c;屏幕前双眼通红的你还在为第三章的实验数据发愁——这或许是许多人学生时代最深刻的记忆。而今天&#xff0c;一个名叫“百考通AI”的工具正在悄然改变这一切。 深夜十二点&#xff0c;计算机专业的李明仍在实验室里对着…...

TsubakiTranslator:Galgame实时翻译完整指南与终极方案

TsubakiTranslator&#xff1a;Galgame实时翻译完整指南与终极方案 【免费下载链接】TsubakiTranslator 一款Galgame文本翻译工具&#xff0c;支持Textractor/剪切板/OCR翻译 项目地址: https://gitcode.com/gh_mirrors/ts/TsubakiTranslator 还在为语言障碍而无法畅玩心…...

芋道源码yudao-cloud 二开实战:自定义文件命名策略与存储路径优化

1. 为什么需要自定义文件命名策略 在实际开发中&#xff0c;文件上传功能看似简单&#xff0c;但隐藏着不少痛点。就拿我最近接手的项目来说&#xff0c;使用芋道源码yudao-cloud框架时&#xff0c;发现默认的文件上传策略是将文件内容进行哈希计算后生成文件名。这种设计虽然保…...

FreeRTOS下I2C与串口通讯的5种高效任务调度策略

1. FreeRTOS下I2C与串口通讯的挑战与优化思路 在嵌入式开发中&#xff0c;I2C和串口通讯是最常用的两种外设接口。当它们运行在FreeRTOS环境下时&#xff0c;会面临一些独特的挑战。我遇到过不少开发者抱怨说&#xff0c;明明裸机环境下跑得好好的通讯代码&#xff0c;一上Free…...

终极指南:如何用MediaPipe TouchDesigner插件打造惊艳的实时视觉交互

终极指南&#xff1a;如何用MediaPipe TouchDesigner插件打造惊艳的实时视觉交互 【免费下载链接】mediapipe-touchdesigner GPU Accelerated MediaPipe Plugin for TouchDesigner 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe-touchdesigner 还在为TouchDes…...

Ubuntu20.04下Pycharm的安装与配置指南

1. 准备工作&#xff1a;下载Pycharm安装包 在Ubuntu20.04上安装Pycharm之前&#xff0c;首先需要下载合适的安装包。JetBrains官网提供了两个版本&#xff1a;专业版&#xff08;Professional&#xff09;和社区版&#xff08;Community&#xff09;。专业版功能更强大但需要付…...

避坑指南:CubeMX配置STM32H743定时器PWM中断,HAL库回调函数到底怎么选?

STM32H743定时器PWM中断实战&#xff1a;HAL库回调函数选择与深度解析 在嵌入式开发中&#xff0c;精确控制PWM信号是驱动电机、控制LED亮度等场景的核心需求。STM32H743作为高性能微控制器&#xff0c;其定时器模块提供了丰富的PWM生成和中断功能。然而&#xff0c;HAL库中看似…...

YOLOE开放检测实战案例:YOLOE-v8l-seg在文化遗产数字化保护中的应用

YOLOE开放检测实战案例&#xff1a;YOLOE-v8l-seg在文化遗产数字化保护中的应用 1. 引言&#xff1a;当古老文物遇见现代AI 想象一下&#xff0c;你是一位文化遗产保护工作者&#xff0c;面对一座布满精美壁画和复杂雕刻的古建筑。你的任务是快速、准确地记录下每一处细节——…...