Python 网络爬虫操作指南
网络爬虫是自动化获取互联网上信息的一种工具。它广泛应用于数据采集、分析以及实现信息聚合等众多领域。本文将为你提供一个完整的Python网络爬虫操作指南,帮助你从零开始学习并实现简单的网络爬虫。我们将涵盖基本的爬虫概念、Python环境配置、常用库介绍。
上传一个垂直爬虫框架方便大家学习https://download.csdn.net/download/vvvae1234/90026823?spm=1001.2014.3001.5503
第一部分:爬虫基础知识
1.1 什么是网络爬虫
网络爬虫(Web Crawler)是一种自动抓取网站信息的程序。不同于手动从网页上提取数据,爬虫可以高效、自动化地获取大量数据。
1.2 爬虫工作原理
- 发送请求:爬虫模拟浏览器发送HTTP请求到服务器。
- 获取响应:服务器处理请求并返回数据。
- 解析数据:爬虫使用解析库(如BeautifulSoup)对HTML内容进行解析和提取信息。
- 存储数据:将提取的数据保存到文件、数据库或其他存储系统。
1.3 爬虫的基本规范
在进行爬虫时需遵循一些基本规范,主要包括:
- Robots.txt:许多网站会在其根目录下提供一个robots.txt文件,说明允许和禁止爬虫访问的部分。
- 请求频率限制:为了防止给服务器带来过多负担,应设定合理的请求间隔。
- 遵守法律法规:需确保遵循当地相关法律法规。
第二部分:环境配置
2.1 安装Python
确保你的计算机已安装Python(推荐使用Python 3.8及以上版本)。可以通过官网下载并安装:Python官网
2.2 安装必要的库
使用pip安装我们需要的库:
pip install requests beautifulsoup4
requests
:用于发送HTTP请求。beautifulsoup4
:用于解析HTML和XML文档。
第三部分:爬虫实操案例
3.1 案例概述
我们将爬取一个新闻网站的标题和链接。这里以“http://news.ycombinator.com/”作为示例,该网站提供了最新的技术新闻。
3.2 编写代码
以下是一个基本的爬虫代码示例:
import requests
from bs4 import BeautifulSoupdef fetch_news():# 发送GET请求url = "https://news.ycombinator.com/"response = requests.get(url)if response.status_code == 200:# 解析HTML内容soup = BeautifulSoup(response.text, "html.parser")news_items = soup.find_all("a", class_="storylink")# 提取标题和链接for i, item in enumerate(news_items, start=1):title = item.get_text()link = item.get("href")print(f"{i}. {title}\n 链接: {link}\n")else:print("请求失败:", response.status_code)if __name__ == "__main__":fetch_news()
3.3 代码详解
- 导入库:我们导入了
requests
和BeautifulSoup
库。 - 发送请求:使用
requests.get()
函数发送HTTP GET请求。 - 检查响应状态:如果响应状态为200(OK),则表示请求成功。
- 解析内容:使用
BeautifulSoup
解析返回的HTML文档。 - 提取信息:通过查找所有具有特定class属性的链接(
storylink
)来提取新闻标题和链接。 - 输出结果:将新闻标题和链接打印到控制台。
3.4 运行代码
将代码保存为news_crawler.py
并在终端执行:
python news_crawler.py
上传一个垂直爬虫框架方便大家学习https://download.csdn.net/download/vvvae1234/90026823?spm=1001.2014.3001.5503
第四部分:数据存储
如果要将提取的数据存储到文件中,可以使用以下代码进行修改:
def fetch_news():url = "https://news.ycombinator.com/"response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, "html.parser")news_items = soup.find_all("a", class_="storylink")# 存储到文件with open("news.txt", "w", encoding="utf-8") as f:for item in news_items:title = item.get_text()link = item.get("href")f.write(f"{title}\n链接: {link}\n\n")print("新闻数据已保存到 news.txt 文件。")else:print("请求失败:", response.status_code)if __name__ == "__main__":fetch_news()
在这种情况下,提取的新闻将保存到news.txt
中,每条新闻之间用换行分隔。
第五部分:进阶功能
5.1 添加异常处理
网络请求可能会失败,例如连接超时、404错误等。可以添加异常处理来提高代码的健壮性:
import requests
from bs4 import BeautifulSoupdef fetch_news():try:url = "https://news.ycombinator.com/"response = requests.get(url)response.raise_for_status() # 检查请求是否成功soup = BeautifulSoup(response.text, "html.parser")news_items = soup.find_all("a", class_="storylink")for i, item in enumerate(news_items, start=1):title = item.get_text()link = item.get("href")print(f"{i}. {title}\n 链接: {link}\n")except requests.exceptions.RequestException as e:print("发生错误:", e)if __name__ == "__main__":fetch_news()
5.2 增加请求间隔
在爬取多个页面时,建议添加暂停,避免过于频繁的请求:
import time# 在循环中添加暂停
for i, item in enumerate(news_items, start=1):time.sleep(1) # 添加暂停,单位为秒# 处理逻辑
第六部分:总结与扩展
通过本文的学习,你已经掌握了网络爬虫的基本知识、环境配置、编码示例及数据存储等操作。随着对爬虫技术的深入了解,你可以进一步探索:
- 爬取动态网页的数据,使用
Selenium
库实现。 - 存储爬取数据至数据库,如SQLite或MongoDB。
- 实现更复杂的爬虫框架,如Scrapy。
网络爬虫是一个强大的工具,它为数据科学、商业分析等领域提供了广泛的应用可能。请务必在爬取时遵循网站的使用规则和法律法规,合法合规地使用爬虫技术。
最后上传一个垂直爬虫框架方便大家学习https://download.csdn.net/download/vvvae1234/90026823?spm=1001.2014.3001.5503
相关文章:
Python 网络爬虫操作指南
网络爬虫是自动化获取互联网上信息的一种工具。它广泛应用于数据采集、分析以及实现信息聚合等众多领域。本文将为你提供一个完整的Python网络爬虫操作指南,帮助你从零开始学习并实现简单的网络爬虫。我们将涵盖基本的爬虫概念、Python环境配置、常用库介绍。 上传…...
vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数
vue3 uniapp 扫普通链接或二维码打开小程序并获取携带参数 微信公众平台添加配置 微信公众平台 > 开发管理 > 开发设置 > 扫普通链接二维码打开小程序 配置链接规则需要下载校验文档给后端存入服务器中,保存配置的时候会校验一次,确定当前的配…...
高标准农田智慧农业系统建设方案
1 项目概述 1.1 建设背景 我国是农业大国,近30年来农田高产量主要依靠农药化肥的大量投入,大部分化肥和水资源没有被有效利用而随地弃置,导致大量养分损失并造成环境污染。我国农业生产仍然以传统生产模式为主,传统耕种只能凭经验施肥灌溉,不仅浪费大量的人力物力,也对环…...
【python图解】数据结构之字典和集合
【python图解】数据结构之字典和集合 在 Python 中,字典和集合是另外的两种重要数据结构,它们分别用于存储键值对和无序的唯一元素集合。下面我们将详细介绍字典和集合的定义、操作方法、使用场景及相关案例。 1. 字典(Dictionary࿰…...
vue 预览pdf 【@sunsetglow/vue-pdf-viewer】开箱即用,无需开发
sunsetglow/vue-pdf-viewer 开箱即用的pdf插件sunsetglow/vue-pdf-viewer, vue3 版本 无需多余开发,操作简单,支持大文件 pdf 滚动加载,缩放,左侧导航,下载,页码,打印,文本复制&…...
TCL嵌入式面试题及参考答案
USB2.0 和 USB3.0 的速度区别是什么? USB2.0 和 USB3.0 在速度上有显著的区别。USB2.0 理论上的最高传输速度为 480Mbps,也就是 60MB/s 左右。而 USB3.0 的理论传输速度则可达到 5Gbps,即约 625MB/s ,这比 USB2.0 快了很多倍。 在实际应用中,USB2.0 通常用于一些对速度要求…...
即时通讯服务器被ddos攻击了怎么办?
攻击即时通讯系统的主要手段 击键记录 目前盗取即时通讯工具帐号信息的最主要方法是通过特洛伊木马等恶意软件,例如QQ木马,这类程序能够盗取QQ密码信息,常见的能够盗取最新版本QQ密码的木马程序有十几种之多。几乎所有主要的QQ木马程序都采…...
RTC QoS方法十三.(ReedSolomonFEC简介)
一、FlexFEC恢复的困局 在使用FlexFEC进行冗余的时候,经验值需要冗余5倍的丢包率,才能有比较高的恢复率。 Flex FEC在2D数组异或时能获得比较高的恢复率,但是如上图所示,25个包发送10个FEC包,成本为10/2540%的冗余度。…...
嵌入式开发工程师面试题 - 2024/11/24
原文嵌入式开发工程师面试题 - 2024/11/24 转载请注明来源 1.若有以下定义语句double a[8],*pa;int i5;对数组元素错误的引用是? A *a B a[5] C *(p1) D p[8] 解析: 在 C 或 C 语言中&am…...
《Shader入门精要》透明效果
代码以及实例图可以看github :zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,当一个物体被渲染到屏幕上时&…...
一篇文章了解Linux
目录 一:命令 1 ls命令作用 2 目录切换命令(cd/pwd) (1)cd切换工作目录命令 3 相对路径、绝对路径和特殊路径 (1)相对路径和绝对路径的概念和写法 (2)几种特殊路径的表示符 (3)练习题: 4 创建目录命令&#x…...
创建字典时,键名不能是数字
4. 请问下面创建字典的 8 种方法中,哪几种是正确的。 >>> a {99:"吕布", 90:"关羽", 60:"刘备"}>>> b dict(99:"吕布", 90:"关羽", 60:"刘备")>>> c dict(99"吕布…...
架构-微服务-环境搭建
文章目录 前言一、案例准备1. 技术选型2. 模块设计3. 微服务调用 二、创建父工程三、创建基础模块四、创建用户微服务五、创建商品微服务六、创建订单微服务 前言 微服务环境搭建 使用的电商项目中的商品、订单、用户为案例进行讲解。 一、案例准备 1. 技术选型 maven&a…...
mysql根据日期查询没有的日期也要显示数据
先查询出日期数据(当前日期往前推12个月) select bb.datefrom (select num : num 1,date_format(adddate(date_sub(date_sub(curdate(),interval 12 month),interval 1 month),interval num month), %Y-%m) as datefrom mysql.help_topic,(select num : 0) as twhere addd…...
ArcGIS定义投影与投影的区别(数据和底图不套合的原因和解决办法)
今天介绍一下ArcGIS中定义投影与投影的区别。 给大家解惑一下为什么经常出现自己的数据无法和底图套合的情况。 一 目录 1、ArcGIS定义投影与投影的概念区别 2、ArcGIS定义正确的坐标系 3、ArcGIS动态投影实现套合 4、ArcGIS地理坐标系转投影坐标系(错误做法&am…...
SQL Server数据库日志(ldf文件)清理
随着系统运行时间的推移,数据库日志文件会变得越来越大,这时我们需要对日志文件进行备份或清理。 下面是日常运维中比较常用的日志清理SQL语句 --- 查询数据库log名称 USE testdb SELECT name, physical_name FROM sys.master_files WHERE database_id …...
ubuntu 安装proxychains
在Ubuntu上安装Proxychains,你可以按照以下步骤操作: 1、更新列表 sudo apt-update 2、安装Proxychains sudo apt-get install proxychains 3、安装完成后,你可以通过编辑/etc/proxychains.conf文件来配置代理规则 以下是一个简单的配置示例&…...
Maven学习笔记
Maven功能介绍 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译、测试、打包、发布.....)提供了一套依赖管理机制 依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件...) ①Maven使用标准的坐标配置来管理…...
.net 支持跨平台(桌面)系列技术汇总
1. 首先微软老大哥的.net core 。 .NET Core 是微软开发的一个跨平台、高性能的开源框架,用于构建云和互联网连接的新型应用。 它允许开发者在 Windows、macOS 和 Linux 上使用喜爱的开发工具进行开发,并支持部署到云或本地环境。 .NET Core 是对 .NET …...
[Golang]传递一个切片(slice)和使用变参(...)语法传递多个参数之间的区别
在 Go 中,传递一个切片(slice)和使用变参(…)语法传递多个参数之间有一些关键区别。让我们详细讨论这两种方式之间的区别: 传递切片(Slice) 传递方式: 传递切片时&…...
【PGCCC】Postgresql BRIN 索引原理
前言 postgresql 提供了块级索引(简称 BRIN),主要适用于类似时序数据之类的,有着天然的顺序,而且都是添加写的场景。相比于 btree 索引,它的体积小得多,非常适用于大数据量的场景。 原理 pos…...
安全加固方案
交换机安全加固 查看是否关闭未使用的接口 25GE1/0/1、25GE1/0/47、25GE1/0/48需要使用,暂不关闭 system-view # interface Eth-Trunk99 shutdown quit interface Eth-Trunk100 shutdown quit interface Eth-Trunk110 shutdown quit interface 25GE1/…...
Adobe Illustrator 2024 安装教程与下载分享
介绍一下 下载直接看文章末尾 Adobe Illustrator 是一款由Adobe Systems开发的矢量图形编辑软件。它广泛应用于创建和编辑矢量图形、插图、徽标、图标、排版和广告等领域。以下是Adobe Illustrator的一些主要特点和功能: 矢量绘图:Illustrator使用矢量…...
WSL安装不同版本ubuntu(已有ubuntu20.04,再装ubuntu18.04)
参考: 如何在 WSL 中删除指定版本的 Ubuntu(以删除 Ubuntu 22.04 为例)_wsl卸载某个-CSDN博客 已有ubuntu20.04,现在再安装一个ubuntu18.04 直接参考下面我写的链接的第四步,前面的步骤都不需要再做了 Win11安装WSL…...
指针测试总结(一)(一维数组)
1.取一维数组的首地址 int main() {int arr[3] {5,8,1}; printf("%d\n",arr);printf("%d\n",&arr);printf("%d\n",&arr[0]);printf("%d\n",&arr0); }输出结果: 1096809108 1096809108 1096809108 1096809108…...
CentOS环境上离线安装python3及相关包
0. 准备操作系统及安装包 准备操作系统环境: 首先安装依赖包,安装相应的编译工具 [rootbigdatahost bin]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…...
Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程
clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…...
算法笔记:回溯算法
回溯法理论基础 「回溯是递归的副产品,只要有递归就会有回溯」,所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。 回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一…...
[工具分享] 根据Excel数据根据Word文档模板,批量创建生成Word文档并重命名,方便快速查找打印
前几天交楼的小姐姐要多份Word文档合同打印给客户,那么100份就需要修改100次 上面好多都是模板的制式文件,里面的部分数据都是要根据实际值来变动的, 那么有没有快速的方法来操作呢,还是只能一个个手动的改,又容易出…...
数据库的联合查询
数据库的联合查询 简介为什么要使⽤联合查询多表联合查询时MYSQL内部是如何进⾏计算的构造练习案例数据案例:⼀个完整的联合查询的过程 内连接语法⽰例 外连接语法 ⽰例⾃连接应⽤场景示例表连接练习 ⼦查询语法单⾏⼦查询多⾏⼦查询多列⼦查询在from⼦句中使⽤⼦查…...
DICOM图像深入解析:为何部分DR/CR图像默认显示为反色?
概述 在数字医学影像处理中,CR(Computed Radiography,计算机放射摄影)和DR(Digital Radiography,数字放射摄影)技术广泛应用于医疗影像获取与分析。然而,临床实践中常常遇到这样一个问题:部分CR/DR图像在默认打开时呈现为反色(即负片效果),需手动反色后才能正常阅片…...
C#基础上机练习题
21.计算500-800区间内素数的个数cn,并按所求素数的值从大到小的顺序排列,再计算其间隔加、减之和,即第1个素数-第2个素数第3个素数-第4个素数第5个素数……的值sum。请编写函数实现程序的要求,把结果cn和sum输出。 22.在三位整数…...
UE5 实现组合键触发事件的方法
因为工作原因。 需要用大括号{和}来触发事件 但是在蓝图中搜了一下,发现键盘事件里根本就没有{}这两个键。 花费了一下午,终于找到解决的方法了,也就是增强输入的弦操作 首先创建一个项目 纯蓝图或者C都可行 进入到内容浏览器的默认页面 …...
Linux麦克风录音实战
在 Linux 上使用麦克风进行录音可以通过多种方式实现,包括使用命令行工具、图形界面应用程序以及编程接口。下面我将介绍几种常见的方法,从简单的命令行工具到使用 PortAudio 库进行编程。 一. 使用arecord命令行工具 arecord 是 ALSA(Adva…...
Diving into the STM32 HAL-----Timers笔记
嵌入式设备会按时间执行某些活动。对于真正简单且不准确的延迟,繁忙的循环可以执行任务,但是使用 CPU 内核执行与时间相关的活动从来都不是一个聪明的解决方案。因此,所有微控制器都提供专用的硬件外设:定时器。定时器不仅是时基生…...
RPC学习
一、什么是 RPC RPC(Remote Procedure Call),即远程过程调用,是一种计算机通信协议,它允许运行在一台计算机上的程序调用另一台计算机上的子程序或函数,就好像调用本地程序中的函数一样,无需程序…...
STM32端口模拟编码器输入
文章目录 前言一、正交编码器是什么?二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…...
深入理解 MyBatis 的缓存机制:一级缓存与二级缓存
MyBatis 是目前 Java 开发中常用的一种 ORM(对象关系映射)框架,它不仅简化了 SQL 语句的编写和管理,还提供了强大的缓存机制,用以提高数据库访问的性能。MyBatis 的缓存分为一级缓存和二级缓存,分别应用于不…...
做一个FabricJS.cc的中文文档网站——面向markdown编程
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,用爱发电&#…...
Elasticsearch在部署时,对Linux的设置有哪些优化方法?
大家好,我是锋哥。今天分享关于【Elasticsearch在部署时,对Linux的设置有哪些优化方法?】面试题。希望对大家有帮助; Elasticsearch在部署时,对Linux的设置有哪些优化方法? 1000道 互联网大厂Java工程师 精…...
ThingsBoard规则链节点:Azure IoT Hub 节点详解
目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台,提供了设备…...
SpringBoot线程池的使用
SpringBoot线程池的使用 在现代Web应用开发中,特别是在使用Spring Boot框架时,合理使用线程池可以显著提高应用的性能和响应速度。线程池不仅能够减少线程创建和销毁的开销,还能有效地控制并发任务的数量,避免因线程过多而导致的…...
ubuntu中使用ffmpeg和nginx推流rtmp视频
最近在测试ffmpeg推流rtmp视频,单独安装ffmpeg是无法完成推流的,需要一个流媒体服务器,常用nginx,可以直接在ubuntu虚拟机里面测试一下。 测试过程不涉及编译ffmpeg和nginx,仅使用基本功能: 1 安装ffmpeg …...
如何在CodeIgniter中添加或加载模型
在CodeIgniter框架中,模型(Model)是用于与数据库进行交互的重要组件。模型通常包含数据库查询、业务逻辑以及与数据库表相关的函数。以下是如何在CodeIgniter中添加或加载模型的步骤: 1. 创建模型文件 首先,你需要在…...
加菲工具 - 好用免费的在线工具集合
加菲工具 https://orcc.online AI 工具 加菲工具 集合了目前主流的,免费可用的ai工具 文档处理 加菲工具 pdf转word、office与pdf互转等等工具都有链接 图片图标 加菲工具 统计了好用免费的在线工具 编码解码 加菲工具 base64编码解码、url编码解码、md5计算…...
Centos 8, add repo
Centos repo前言 Centos 8更换在线阿里云创建一键更换repo 自动化脚本 华为Centos 源 , 阿里云Centos 源 华为epel 源 , 阿里云epel 源vim /centos8_repo.sh #!/bin/bash # -*- coding: utf-8 -*- # Author: make.han...
神经网络12-Time-Series Transformer (TST)模型
Time-Series Transformer (TST) 是一种基于 Transformer 架构的深度学习模型,专门用于时序数据的建模和预测。TST 是 Transformer 模型的一个变种,针对传统时序模型(如 RNN、LSTM)在处理长时间依赖、复杂数据关系时的限制而提出的…...
在 Ubuntu 上安装 Yarn 环境
在 Ubuntu 上安装 Yarn 环境 步骤 1: 更新系统步骤 2: 安装 Node.js步骤 3: 安装 Yarn方法 1: 使用 npm 安装方法 2: 使用 APT 安装 步骤 4: 验证安装总结 在 Ubuntu 上安装 Yarn 环境可以通过以下步骤完成: 步骤 1: 更新系统 首先,确保你的系统是最新…...
OEM sql monitoring 类似SQL
不够OEM 全面 select a.inst_id,a.time_since_last_wait_micro,a.last_call_et,a.sql_id,a.sql_hash_value, a.username,a.pdml_enabled,a.pdml_status ,a.prev_sql_id from gv$session a where a.statusACTIVE and a.sql_id is not null and a.username is not null select …...
【数据分析】基于GEE实现大津算法提取洞庭湖流域水体
大津算法提取水体 1.写在前面2.洞庭湖水体识别1.写在前面 最大类间方差法,也称为Otsu或大津法,是一种高效的图像二值化算法,由日本学者Otsu于1979年提出。该算法基于图像的频率分布直方图,假设图像包含两类像素(前景和背景),并计算出一个最佳阈值,以最大化类间方差,从…...