大连本地知识库的搭建--数据收集与预处理_01
1.马蜂窝爬虫
- 编程语言:Python
- 爬虫框架:Selenium(用于浏览器自动化)
- 解析库:BeautifulSoup(用于解析HTML)
2.爬虫策略
- 目标网站:马蜂窝(https://www.mafengwo.cn/)
- 目标数据:大连的攻略和游记
- 流程概述:
- 打开马蜂窝首页并进行搜索。
- 提取搜索结果页面中的攻略和游记链接。
- 分别访问每个攻略和游记页面,提取内容并保存到本地文件。
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 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析,并增加数据探索环节,同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图,方便对比。 《深度学习实战》第…...
nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典
向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 1. 项目结构 首先,创建一个项目目录,结构如下࿱…...
《深度剖析Linux 系统 Shell 核心用法与原理_666》
1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件,并通过grep查找包含特定字符串的文件…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
