【Python实战案例】爬虫项目实例(附赠源码)
文章目录
- 声明
- 安装必要的库
- 项目结构
- 技术细节
- 小结
声明

请您遵守网站的robots文件规定,本文目的只是做学习交流使用,包括多个模块,例如数据存储、日志记录、错误处理、多线程或异步请求
安装必要的库
pip install requests beautifulsoup4 sqlite3
项目结构
创建以下文件和目录结构
my_crawler/
├── config.py
├── crawler.py
├── db.py
├── logger.py
└── main.py
技术细节
配置文件 config.py
配置文件用于存储常量和配置项:
BASE_URL = 'https://example.com'
ARTICLES_URL = f'{BASE_URL}/articles'
DATABASE_NAME = 'articles.db'
LOG_FILE = 'crawler.log'
1.数据库操作 db.py
用于创建数据库表和插入数据:
#db.pyimport sqlite3
from config import DATABASE_NAMEdef init_db():conn = sqlite3.connect(DATABASE_NAME)cursor = conn.cursor()cursor.execute('''CREATE TABLE IF NOT EXISTS articles (id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT NOT NULL,url TEXT NOT NULL)''')conn.commit()conn.close()def insert_article(title, url):conn = sqlite3.connect(DATABASE_NAME)cursor = conn.cursor()cursor.execute('INSERT INTO articles (title, url) VALUES (?, ?)', (title, url))conn.commit()conn.close()
2.日志记录 logger.py
用于配置日志记录:
logger.pyimport logging
from config import LOG_FILEdef setup_logger():logging.basicConfig(filename=LOG_FILE,level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')logger = setup_logger()
3.爬虫逻辑 crawler.py
包含爬虫的主要逻辑:
crawler.pyimport requests
from bs4 import BeautifulSoup
from config import ARTICLES_URL
from db import insert_article
from logger import loggerdef fetch_page(url):"""获取网页内容"""try:response = requests.get(url)response.raise_for_status() # 检查请求是否成功return response.textexcept requests.RequestException as e:logger.error(f"请求错误: {e}")return Nonedef parse_html(html):"""解析HTML,提取文章标题和URL"""soup = BeautifulSoup(html, 'html.parser')articles = []for article in soup.find_all('div', class_='article'):title = article.find('h1', class_='article-title').get_text(strip=True)url = article.find('a')['href']articles.append((title, url))return articlesdef crawl_articles():"""抓取并保存文章"""html = fetch_page(ARTICLES_URL)if html:articles = parse_html(html)for title, url in articles:insert_article(title, url)logger.info(f"已保存文章: {title} - {url}")
- 主程序 main.py
启动爬虫的主程序:
main.pyfrom crawler import crawl_articles
from db import init_db
from logger import loggerdef main():logger.info("开始爬虫任务")init_db()crawl_articles()logger.info("爬虫任务完成")if __name__ == '__main__':main()
小结
请您遵守网站的robots文件规定,本文目的只是做学习交流使用,感谢csdn平台
相关文章:
【Python实战案例】爬虫项目实例(附赠源码)
文章目录 声明安装必要的库项目结构技术细节小结 声明 请您遵守网站的robots文件规定,本文目的只是做学习交流使用,包括多个模块,例如数据存储、日志记录、错误处理、多线程或异步请求 安装必要的库 pip install requests beautifulsoup4 sq…...
PDF多功能工具箱 PDF Shaper v14.6
如今对PDF处理的软件很多都是只是单一的功能。PDF Shaper给你完全不同的体验,因为PDF Shaper是一款免费的PDF工具集合的软件。有了PDF Shaper,你以后再也不用下载其他处理PDF的软件了。PDF Shaper的功能有:合并,分割,加…...
Jupyter Notebook添加kernel的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
Linux 无名管道
无名管道(unnamed pipe)是一种进程间通信的方式,通常用于父子进程之间的通信。下面是使用无名管道的基本步骤: pipe 调用的返回值如下: 成功时:pipe 调用成功时返回 0。失败时:如果 pipe 调用…...
Java项目实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着医疗行业的快速发展和人们对健康需…...
前端拖拽库方案之react-beautiful-dnd
近期,知名 React 拖拽库 react-beautiful-dnd 宣布了项目弃用的决定,未来将不再维护。这一决定源于其存在的缺陷与局限性,促使作者转向开发一个更加现代化的拖拽解决方案——Pragmatic drag and drop(下面会介绍)&…...
【题解】CF2033G
题目 CF2033G 分析 一道很显然是树形dp的题,但非常恶心QwQ。 先不管复杂度,找找递推关系,一种很直接的想法如下(我觉得是错误的): d p [ i ] [ k ] m a x ( d p [ f a i ] [ k − 1 ] , d p [ s o …...
【error】 react 控制台报错Invalid hook call
目录 事件起因解决办法结束语 事件起因 我的前端react ant-design-pro项目能正常启动 但是网页这边就是一片空白,然后在浏览器的控制台报错: index.js:1 Warning: Invalid hook call. Hooks can only be called inside of the body of a function co…...
SDL基本使用
#include <stdio.h>#include <SDL.h>#undef main int main() {printf("Hello World!\n");SDL_Window *window NULL; // 声明窗口SDL_Init(SDL_INIT_VIDEO); // 初始化SDL// 创建SDL Windowwindow SDL_CreateWindow("Basic Window"…...
大模型的temperature参数
目录 模型的temperature参数 一、定义与作用 二、工作原理 三、举例说明 四、应用场景与调整策略 五、注意事项 模型的temperature参数 是人工智能领域中,特别是在生成式模型中使用的一个重要概念。它主要用于控制生成结果的多样性和随机性。以下是对该参数的详细解释和…...
软件项目功能复用指南,复用方案,评估方案(word原件)
6 复用原则 6.1 单一职责原则 SRP (Single Responsibility Principle) 6.2 开放封闭原则 OCP (Open Closed Principle) 6.3 Liskov 替换原则 LSP (Liskov Subtitle Principle) 6.4 接口隔离原则 ISP &a…...
leetcode 3255 长度为 K 的子数组的能量值 II 中等
给你一个长度为 n 的整数数组 nums 和一个正整数 k 。 一个数组的 能量值 定义为: 如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的 子数组 的能量值。 请你返回一个长度为 n …...
CCS下载安装(以12.3.0版本为例)
Code Composer Studio 是一个集成开发环境 (IDE),简称CCS软件。支持 TI 的微控制器和嵌入式处理器产品的开发。Code Composer Studio 包含一整套用于开发和调试嵌入式应用程序的工具。 CCS9.3.0及以上版本不需要License文件,但是CCS旧版本比如CCS5.5.0需…...
C++STL容器详解——list
目录 一.list 1.list的介绍 2.为什么会有list? 二.list的常见接口 1.list的构造函数 2.list的遍历 3.迭代器类型 4.list的头插头删和尾插尾删 5.list任意位置的插入和删除 6.list的sort()及reverse() 7.迭代器失效 三.整体代码 一.list 1.list的介绍 list的文档说…...
linux tar 打包为多个文件
将目录打包成多个大小为 80MB 的文件,可以使用以下命令: tar -cf - my_folder | split -b 80m - my_folder.tar.解释: tar -cf - my_folder 将 my_folder 目录打包成一个 tar 文件并通过管道 (|) 输出到标准输出。 split -b 80m - my_fold…...
json字符串与python字典的区别与联系
json字符串与python中自带的字典类型外表长的很像,很容易区分不清楚,它们之间有着本质的区别,可以通过内置的json模块来互相转换。 文章目录 1、Python字典2、JSON数据格式3、JSON与python字典的区别4、JSON与python字典相互转换4.1 json字符…...
数据结构-链表【chapter1】【c语言版】
目录 1 链表的优势: 2 链表的组成: 3.一般使用结构体的形式来实现链表: 4.单向链表实现(创建,遍历,释放): 4.1代码关键点备注: 5.查找节点: 5.1.按值查找节点 5.2.按位置查找节点 5.3 …...
OJ05:989. 数组形式的整数加法
目录 题目思路分析代码展示 题目 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如,对于 num 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num k 的 数组形…...
山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议
自从YY、六间房开启国内聊天室和秀场等网红盛行的网络红利时代以来,紧随其后国内各大音视频平台相应出现,先有映客花椒等直播平台的风头正劲,后有功能板块更丰富的头条抖音Tiktok等,盈利功能点不仅仅有直播PK连麦等礼物打赏功能&a…...
docker搭建guacamole,web远程桌面
Apache Guacamole 是一个客户端无插件的远程桌面网关。它支持标准协议,如 VNC、RDP 和 SSH。您可以使用任何现代 web 浏览器连接到您的桌面环境,而无需安装额外的软件。使用 Docker Compose 部署 Guacamole,如果没有docker-compose请先执行su…...
从Word2Vec到BERT:前馈网络在NLP词嵌入进化史中扮演了什么角色?
从Word2Vec到BERT:前馈网络如何重塑NLP词嵌入的技术基因 在自然语言处理(NLP)的发展历程中,词嵌入技术的进化犹如一场静默的革命。当我们回溯这段历史时会发现,前馈神经网络(Feedforward Neural Network&am…...
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60%
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60% 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当系统频繁弹出"磁盘空间不足&q…...
Qwen3-TTS-Tokenizer-12Hz实操手册:音频峰值检测与动态范围压缩联动
Qwen3-TTS-Tokenizer-12Hz实操手册:音频峰值检测与动态范围压缩联动 1. 引言:音频处理的关键挑战 音频处理中经常遇到两个棘手问题:一是音频信号动态范围过大导致某些部分听不清,二是峰值过高造成失真。传统方法需要分别处理这两…...
分布式爬虫安全:构建高可用代理池的架构与实践指南
分布式爬虫安全:构建高可用代理池的架构与实践指南 【免费下载链接】scylla Intelligent proxy pool for Humans™ to extract content from the internet and build your own Large Language Models in this new AI era 项目地址: https://gitcode.com/gh_mirror…...
AlwaysOnTop窗口置顶工具:3大突破性功能重塑你的多任务工作流
AlwaysOnTop窗口置顶工具:3大突破性功能重塑你的多任务工作流 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 在当今数字化工作环境中,我们每天平均需要切…...
白帽 SEO 与网站分析数据的关系是什么
<h3 id"seo">白帽 SEO 与网站分析数据的关系是什么</h3> <p>在当今互联网时代,搜索引擎优化(SEO)已经成为了每个网站提升流量和品牌知名度的关键因素。而在众多的SEO策略中,白帽SEO(White…...
ENVI 5.3 vs 5.6 处理GF-6/GF-7数据实测:版本差异、流程对比与效率优化心得
ENVI 5.3与5.6处理GF-6/GF-7数据深度评测:从版本差异到实战优化 当高分卫星数据成为遥感分析的主流选择,ENVI作为行业标杆软件,其版本迭代对数据处理效率的影响往往被低估。本文将基于真实项目经验,拆解ENVI 5.3与5.6在处理GF-6/G…...
Steam Achievement Manager完全指南:开源工具解决Steam游戏成就高效管理难题
Steam Achievement Manager完全指南:开源工具解决Steam游戏成就高效管理难题 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager Steam Achievemen…...
libmill实战教程:构建高性能TCP服务器的10个技巧
libmill实战教程:构建高性能TCP服务器的10个技巧 【免费下载链接】libmill Go-style concurrency in C 项目地址: https://gitcode.com/gh_mirrors/li/libmill libmill是一个在C语言中实现Go风格并发的库,它允许开发者轻松创建高性能的网络应用程…...
BYD Battery Emulator:让电动汽车电池成为家庭储能的智能桥梁
BYD Battery Emulator:让电动汽车电池成为家庭储能的智能桥梁 【免费下载链接】BYD-Battery-Emulator-For-Gen24 This software enables EV battery packs to be used for stationary storage in combination with solar inverters. 项目地址: https://gitcode.co…...
