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

【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}")
  1. 主程序 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 &#xff08;Single Responsibility Principle&#xff09; 6.2 开放封闭原则 OCP &#xff08;Open Closed Principle&#xff09; 6.3 Liskov 替换原则 LSP &#xff08;Liskov Subtitle Principle&#xff09; 6.4 接口隔离原则 ISP &a…...

leetcode 3255 长度为 K 的子数组的能量值 II 中等

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。 一个数组的 能量值 定义为&#xff1a; 如果 所有 元素都是依次 连续 且 上升 的&#xff0c;那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的 子数组 的能量值。 请你返回一个长度为 n …...

CCS下载安装(以12.3.0版本为例)

Code Composer Studio 是一个集成开发环境 (IDE)&#xff0c;简称CCS软件。支持 TI 的微控制器和嵌入式处理器产品的开发。Code Composer Studio 包含一整套用于开发和调试嵌入式应用程序的工具。 CCS9.3.0及以上版本不需要License文件&#xff0c;但是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 的文件&#xff0c;可以使用以下命令&#xff1a; tar -cf - my_folder | split -b 80m - my_folder.tar.解释&#xff1a; tar -cf - my_folder 将 my_folder 目录打包成一个 tar 文件并通过管道 (|) 输出到标准输出。 split -b 80m - my_fold…...

json字符串与python字典的区别与联系

json字符串与python中自带的字典类型外表长的很像&#xff0c;很容易区分不清楚&#xff0c;它们之间有着本质的区别&#xff0c;可以通过内置的json模块来互相转换。 文章目录 1、Python字典2、JSON数据格式3、JSON与python字典的区别4、JSON与python字典相互转换4.1 json字符…...

数据结构-链表【chapter1】【c语言版】

目录 1 链表的优势&#xff1a; 2 链表的组成: 3.一般使用结构体的形式来实现链表&#xff1a; 4.单向链表实现(创建&#xff0c;遍历&#xff0c;释放)&#xff1a; 4.1代码关键点备注&#xff1a; 5.查找节点&#xff1a; 5.1.按值查找节点 5.2.按位置查找节点 5.3 …...

OJ05:989. 数组形式的整数加法

目录 题目思路分析代码展示 题目 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如&#xff0c;对于 num 1321 &#xff0c;数组形式是 [1,3,2,1] 。 给定 num &#xff0c;整数的 数组形式 &#xff0c;和整数 k &#xff0c;返回 整数 num k 的 数组形…...

山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议

自从YY、六间房开启国内聊天室和秀场等网红盛行的网络红利时代以来&#xff0c;紧随其后国内各大音视频平台相应出现&#xff0c;先有映客花椒等直播平台的风头正劲&#xff0c;后有功能板块更丰富的头条抖音Tiktok等&#xff0c;盈利功能点不仅仅有直播PK连麦等礼物打赏功能&a…...

docker搭建guacamole,web远程桌面

Apache Guacamole 是一个客户端无插件的远程桌面网关。它支持标准协议&#xff0c;如 VNC、RDP 和 SSH。您可以使用任何现代 web 浏览器连接到您的桌面环境&#xff0c;而无需安装额外的软件。使用 Docker Compose 部署 Guacamole&#xff0c;如果没有docker-compose请先执行su…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...