常用python爬虫框架介绍
文章目录
- 前言
- 1. Scrapy
- 2. BeautifulSoup 与 Requests 组合
- 3. Selenium
- 4. PySpider
前言
Python 有许多优秀的爬虫框架,每个框架都有其独特的特点和适用场景。以下为你详细介绍几个常用的 Python 爬虫框架:
Python 3.13.2 安装教程(附安装包):https://blog.csdn.net/2501_91193507/article/details/146770362
Python 3.13.2下载链接:https://pan.quark.cn/s/1bddf43c0c2f
1. Scrapy
- 简介:Scrapy 是一个为了爬取网站数据、提取结构性数据而编写的应用框架。它可以应用在数据挖掘、信息处理或存储历史数据等一系列的程序中。其功能强大,提供了数据抓取、数据处理、数据存储等一系列完整的解决方案。
- 特点
高效性:基于异步网络库 Twisted 实现,能够高效地处理大量的并发请求,大大提高了爬取效率。
组件化设计:具有高度模块化的架构,各个组件(如调度器、下载器、爬虫、管道等)之间相互独立又协同工作,方便用户根据需求进行定制和扩展。
数据处理方便:提供了强大的选择器(如 XPath、CSS 选择器)用于提取网页中的数据,还支持多种数据格式(如 JSON、CSV、XML 等)的存储。
中间件支持:支持多种中间件,如下载中间件和爬虫中间件,可以方便地对请求和响应进行处理,例如设置代理、处理请求头、处理异常等。
适用场景:适用于大规模、高效率的爬虫项目,如搜索引擎数据采集、电商网站商品信息抓取等。
示例代码
import scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"start_urls = ['https://quotes.toscrape.com',]def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').get(),'author': quote.css('small.author::text').get(),'tags': quote.css('div.tags a.tag::text').getall(),}next_page = response.css('li.next a::attr(href)').get()if next_page is not None:yield response.follow(next_page, self.parse)
你可以使用以下命令运行这个爬虫:
bash
scrapy runspider quotes_spider.py -o quotes.json
2. BeautifulSoup 与 Requests 组合
- 简介:严格来说,BeautifulSoup 是一个用于解析 HTML 和 XML 文档的库,而 Requests 是一个用于发送 HTTP 请求的库。它们通常一起使用,作为一个轻量级的爬虫解决方案。
- 特点
简单易用:API 设计简洁明了,容易上手,对于初学者来说非常友好。
灵活性高:可以根据具体需求自由组合和定制爬取逻辑,不受框架的限制。
广泛的解析支持:BeautifulSoup 支持多种解析器(如 Python 内置的 html.parser、lxml 等),可以根据不同的需求选择合适的解析器。
适用场景:适用于小规模、简单的爬虫任务,如抓取单个网页的数据、简单的数据采集等。
示例代码
import requests
from bs4 import BeautifulSoupurl = 'https://quotes.toscrape.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')quotes = soup.find_all('div', class_='quote')
for quote in quotes:text = quote.find('span', class_='text').textauthor = quote.find('small', class_='author').textprint(f'Quote: {text}, Author: {author}')
3. Selenium
- 简介:Selenium 是一个用于自动化浏览器操作的工具,它可以模拟用户在浏览器中的各种行为,如点击、输入、滚动等。在爬虫领域,Selenium 常用于处理动态网页,即需要通过 JavaScript 动态加载内容的网页。
- 特点
处理动态内容:能够模拟浏览器的渲染过程,获取动态加载的网页内容,解决了许多传统爬虫无法处理的问题。
跨浏览器支持:支持多种主流浏览器(如 Chrome、Firefox、Safari 等),可以根据需求选择合适的浏览器进行自动化操作。
丰富的操作方法:提供了丰富的 API 用于模拟用户的各种操作,如点击按钮、填写表单、切换页面等。
适用场景:适用于需要处理动态网页的爬虫任务,如爬取电商网站的商品详情页(需要点击 “查看更多” 按钮才能显示完整信息)、社交媒体网站的动态内容等。
示例代码
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get('https://quotes.toscrape.com')quotes = driver.find_elements(By.CSS_SELECTOR, 'div.quote')
for quote in quotes:text = quote.find_element(By.CSS_SELECTOR, 'span.text').textauthor = quote.find_element(By.CSS_SELECTOR, 'small.author').textprint(f'Quote: {text}, Author: {author}')driver.quit()
4. PySpider
- 简介:PySpider 是一个国产的、轻量级的爬虫框架,它提供了一个可视化的界面,方便用户进行爬虫的创建、调试和管理。
- 特点
可视化界面:具有直观的 Web 界面,用户可以通过浏览器访问和操作,无需编写复杂的命令行脚本。
分布式支持:支持分布式爬取,可以利用多台机器的资源提高爬取效率。
自动重试和断点续爬:具备自动重试机制,当请求失败时会自动重试;同时支持断点续爬,在爬取过程中中断后可以继续从上次中断的位置开始爬取。
适用场景:适用于需要快速开发和部署爬虫的场景,尤其是对于非专业的开发者来说,其可视化界面降低了开发门槛。
示例代码(通过 Web 界面创建爬虫)
启动 PySpider 服务:在命令行中运行 pyspider all。
打开浏览器,访问 http://localhost:5000,进入 PySpider 的 Web 界面。
在 Web 界面中创建一个新的爬虫,编写爬取逻辑:
from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config = {}@every(minutes=24 * 60)def on_start(self):self.crawl('https://quotes.toscrape.com', callback=self.index_page)@config(age=10 * 24 * 60 * 60)def index_page(self, response):for each in response.doc('div.quote').items():self.crawl(each.attr.href, callback=self.detail_page)@config(priority=2)def detail_page(self, response):return {"url": response.url,"title": response.doc('title').text(),}
相关文章:
常用python爬虫框架介绍
文章目录 前言1. Scrapy2. BeautifulSoup 与 Requests 组合3. Selenium4. PySpider 前言 Python 有许多优秀的爬虫框架,每个框架都有其独特的特点和适用场景。以下为你详细介绍几个常用的 Python 爬虫框架: Python 3.13.2 安装教程(附安装包…...
HarmonyOS:网络HTTP数据请求
导读 场景介绍接口说明request接口开发步骤requestInStream接口开发步骤证书锁定预置应用级证书预置证书公钥哈希值JSON配置文件示例 场景介绍 通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法 接口说明 HTTP数据…...
CoinNexus Chain 推出泰利风暴,开启 Web3.0 智能金融元宇宙科技新时代
4月25日,CoinNexusChain 区块链正式推出开创性的“泰利风暴”(Terry Storm),再次展现了其前瞻性的视野和非凡的潜力。这标志着 CoinNexusChain 在 Web3.0 创新浪潮中迈出了重要一步。 Terry是一种创新的 RWA 金融激励机制&…...
编译opencv源码使得opencv-python获得gstreamer支持
我个人习惯在miniconda中使用python版本的opencv,使用pip进行安装时,默认的包并不会有gstreamer支持,我尝试过自己编译opencv-python,编出的包有各种各样的问题。最终还是决定自己从opencv仓库源码自行编译。 安装gstreamer apt…...
眼镜眨巴眨巴-一步几个脚印从头设计数字生命2——仙盟创梦IDE
import cv2 import mediapipe as mp import numpy as np import timemp_drawing mp.solutions.drawing_utils mp_face_mesh mp.solutions.face_mesh# 加载图片 image cv2.imread(wlzc.jpg) # image_height, image_width, _ image.shape# 初始化面部网格模型 with mp_face_…...
django之数据的翻页和搜索功能
数据的翻页和搜素功能 目录 1.实现搜素功能 2.实现翻页功能 一、实现搜素功能 我们到bootstrap官网, 点击组件, 然后找到输入框组, 并点击作为额外元素的按钮。 我们需要使用上面红色框里面的组件, 就是搜素组件, 代码部分就是下面红色框框出来的部分。 把这里的代码复制…...
linux复习
1.关于进程 1.1 概念 用户角度:进程是程序的一次执行实例,也就是正在运行的程序 内核角度:操作系统分配内存和cpu资源的实体 操作系统使用内核数据结构 程序的代码及数据 描述进程,Linux中对应的内核数据结构就是task_struct…...
Post-Processing PropertySource instance详解 和 BeanFactoryPostProcessor详解
PropertySourcesBeanFactoryPostProcessor详解 1. 核心概念 BeanFactoryPostProcessor 是 Spring 框架中用于在 BeanFactory 初始化阶段 对 Environment 中的 PropertySource 进行后处理的接口。它允许开发者在 Bean 创建之前 对属性源进行动态修改,例如添加、删除…...
go 编译的 windows 进程(exe)以管理员权限启动(UAC)
引言 windows 系统,在打开某些 exe 的时候,会弹出“用户账户控制(UAC)”的弹窗 “你要允许来自xx发布者的此应用对你的设备进行更改吗?” UAC(User Account Control,用户账户控制)是 Windows 操作系统中的…...
Elasticsearch性能优化实践
一、背景与挑战 基金研报搜索场景中,我们面临以下核心挑战: 数据规模庞大:单索引超500GB原始数据,包含300万份PDF/Word研报文档查询性能瓶颈:复杂查询平均响应时间超过10秒,高峰期CPU负载达95%存储…...
【Web API系列】Web Shared Storage API 深度解析:WindowSharedStorage 接口实战指南
前言 在当今 Web 应用日益复杂的背景下,跨页面数据共享与隐私保护已成为现代浏览器技术演进的重要命题。传统 Web 存储方案(如 Cookies、LocalStorage)在应对多维度用户特征存储、跨上下文数据共享等场景时,逐渐暴露出技术瓶颈与…...
Eureka、LoadBalance和Nacos
Eureka、LoadBalance和Nacos 一.Eureka引入1.注册中心2.CAP理论3.常见的注册中心 二.Eureka介绍1.搭建Eureka Server 注册中心2.搭建服务注册3.服务发现 三.负载均衡LoadBalance1.问题引入2.服务端负载均衡3.客户端负载均衡4.Spring Cloud LoadBalancer1).快速上手2)负载均衡策…...
智能体MCP 实现数据可视化分析
参考: 在线体验 https://www.doubao.com/chat/ 下载安装离线体验 WPS软件上的表格分析 云上创建 阿里mcp:https://developer.aliyun.com/article/1661198 (搜索加可视化) 案例 用cline 或者cherry studio实现 mcp server:excel-mcp-server、quickchart-mcp-server...
3小时速通Python-Python学习总部署、总预览(一)
目录 Python的关键字有哪些: 编辑 代码:1-5: 代码:6-10: 代码:11-15: 代码:16-20: 代码:21-25: 代码:26-27: Pyt…...
机器学习基础 - 分类模型之决策树
决策树 文章目录 决策树简介决策树三要素1. 特征的选择1. ID32. C4.53. CART2. 剪枝处理0. 剪枝的作用1. 预剪枝2. 后剪枝QA1. ID3, C4.5, CART 这三种决策树的区别2. 树形结构为何不需要归一化?3. 分类决策树与回归决策树的区别4. 为何信息增益会偏向多取值特征?4. 为何信息…...
Java面向对象的三大特性
## 1. 封装(Encapsulation) 封装是将数据和操作数据的方法绑定在一起,对外部隐藏对象的具体实现细节。通过访问修饰符来实现封装。 示例代码: java public class Student { // 私有属性 private String name; private int age; …...
【Pandas】pandas DataFrame truediv
Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...
GTS-400 系列运动控制器板(六)----修改编码器计数方向
运动控制器函数库的使用 运动控制器驱动程序、 dll 文件、例程、 Demo 等相关文件请通过固高科技官网下载,网 址为: www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提…...
卷积神经网络迁移学习:原理与实践指南
引言 在深度学习领域,卷积神经网络(CNN)已经在计算机视觉任务中取得了巨大成功。然而,从头开始训练一个高性能的CNN模型需要大量标注数据和计算资源。迁移学习(Transfer Learning)技术为我们提供了一种高效解决方案,它能够将预训练模型的知识…...
Django 入门实战:从环境搭建到构建你的第一个 Web 应用
Django 入门实战:从环境搭建到构建你的第一个 Web 应用 恭喜你选择 Django 作为你学习 Python Web 开发的起点!Django 是一个强大、成熟且功能齐全的框架,非常适合构建中大型的 Web 应用程序。本篇将通过一个简单的例子,带你走完…...
【后端】构建简洁的音频转写系统:基于火山引擎ASR实现
在当今数字化时代,语音识别技术已经成为许多应用不可或缺的一部分。无论是会议记录、语音助手还是内容字幕,将语音转化为文本的能力对提升用户体验和工作效率至关重要。本文将介绍如何构建一个简洁的音频转写系统,专注于文件上传、云存储以及…...
http通信之axios vs fecth该如何选择?
在HTTP通信中,axios和fetch都是常用的库或原生API用于发起网络请求。两者各有特点,适用于不同的场景。下面详细介绍它们的差异和各自的优势: fetch 特点: 原生支持:fetch是现代浏览器内置的API,不需要额外…...
iostat指令介绍
文章目录 1. 功能介绍2. 语法介绍3. 应用场景4. 示例分析 1. 功能介绍 iostat (input/output statistics),是 Linux/Unix 系统中用于监控 CPU 使用率和 磁盘 I/O 性能的核心工具,可实时展示设备负载、吞吐量、队列状态等关键指标。 可以使用 man iostat查…...
NLP高频面试题(五十)——大模型(LLMs)分词(Tokenizer)详解
在自然语言处理(NLP)任务中,将文本转换为模型可处理的数字序列是必不可少的一步。这一步通常称为分词(tokenization),即把原始文本拆分成一个个词元(token)。对于**大型语言模型(LLM,Large Language Model,大型语言模型)**而言,选择合适的分词方案至关重要:分词的…...
桌面我的电脑图标不见了怎么恢复 恢复方法指南
在Windows操作系统中,“我的电脑”或在较新版本中称为“此电脑”的图标,是访问硬盘驱动器、外部存储设备和系统文件的重要入口。然而,有些用户可能会发现桌面上缺少了这个图标,这可能是由于误操作、系统设置更改或是不小心删除造成…...
【Qt】控件的理解 和 基础控件 QWidget 属性详解(通俗易懂+附源码+思维导图框架)
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论: 通过上一章对信号槽的理解相信你对Qt的认识肯定有了很大的进步,下面将通过本篇文章带你深入的认识Widget控件(主窗口࿰…...
oracle将表字段逗号分隔的值进行拆分,并替换值
需求背景:需要源数据变动,需要对历史表已存的字段值根据源数据进行更新。如果是单字段存值,直接根据映射表关联修改即可。但字段里面若存的值是以逗号分割,比如旧值:‘old1,old2,old3’,要根据映射关系调整…...
用c语言实现——一个带头节点的链队列,支持用户输入交互界面、初始化、入队、出队、查找、判空判满、显示队列、遍历计算长度等功能
一、知识介绍 带头节点的链队列是一种基于链表实现的队列结构,它在链表的头部添加了一个特殊的节点,称为头节点。头节点不存储实际的数据元素,主要作用是作为链表的起点,简化队列的操作和边界条件处理。 1.节点结构 链队列的每…...
webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)
目录 1、webpack简介2、简单示例3、入口(entry)和输出(output)4、自动生成html文件5、打包css代码6、优化(单独提取css代码)7、优化(压缩过程)8、打包less代码9、打包图片10、搭建开发环境(webpack-dev-server…...
【项目】基于MCP+Tabelstore架构实现知识库答疑系统
基于MCPTabelstore架构实现知识库答疑系统 整体流程设计(一)Agent 架构(二)知识库存储(1)向量数据库Tablestore(2)MCP Server (三)知识库构建(1&a…...
C语言高频面试题——malloc 和 calloc区别
在 C 语言中,malloc 和 calloc 都是用于动态内存分配的函数,但它们在 内存初始化、参数形式 和 使用场景 上有显著区别。以下是详细的对比分析: 1. 函数原型 malloc void* malloc(size_t size);功能:分配 未初始化 的连续内存块…...
深入探讨JavaScript性能瓶颈与优化实战指南
JavaScript作为现代Web开发的核心语言,其性能直接影响用户体验与业务指标。随着2025年前端应用的复杂性持续增加,性能优化已成为开发者必须掌握的核心技能。本文将从性能瓶颈分析、优化策略、工具使用三个维度,结合实战案例,系统梳理JavaScript性能优化的关键路径。 一、Ja…...
[创业之路-376]:企业法务 - 创业,不同的企业形态,个人承担的风险、收益、税费、成本不同
在企业法务领域,创业时选择不同的企业形态,个人在风险承担、收益分配、税费负担及运营成本方面存在显著差异。以下从个人独资企业、合伙企业、有限责任公司、股份有限公司四种常见形态展开分析: 一、个人承担的风险 个人独资企业 风险类型&…...
【Lua】Lua 入门知识点总结
Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用,包括全局变量和局部变量的区别,以及nil类型的概念、数值型、字符串和函数的基本操作,包括16进制表示、科学计数法、字符串连接、函数声明…...
低空经济 WebGIS 无人机配送 | 图扑数字孪生
2024 年,”低空经济” 首次写入政府工作报告,在政策驱动下各地纷纷把握政策机遇,从基建网络、场景创新、产业生态、政策激励等方面,构建 “规划-建设-应用-赋能” 的系统性布局,作为新质生产力的重要体现,推…...
【程序员 NLP 入门】词嵌入 - 如何基于计数的方法表示文本? (★小白必会版★)
🌟 嗨,你好,我是 青松 ! 🌈 希望用我的经验,让“程序猿”的AI学习之路走的更容易些,若我的经验能为你前行的道路增添一丝轻松,我将倍感荣幸!共勉~ 【程序员 NLP 入门】词…...
基于机器学习的多光谱遥感图像分类方法研究与定量评估
多光谱遥感技术通过获取可见光至红外波段的光谱信息,为地质勘探、农业监测、环境调查等领域提供了重要支持。与普通数码相机相比,多光谱成像能记录更丰富的波段数据(如近红外、短波红外等),从而更精准地识别地物特征。…...
BEVDepth: Acquisition of Reliable Depth for Multi-View 3D Object Detection
背景 基于多视角图片的3D感知被LSS证明是可行的,它使用估计的深度将图像特征转化为3D视椎,再将其压缩到BEV平面上。对于这个得到的BEV特征图,它支持端到端训练以及各种下游任务。但是对于深度估计这一块学习的深度质量如何,到目前为止没有相关工作研究。 贡献 本文的贡献…...
【Linux】静态库 动态库
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、👑静态库和动态库 静态库: 动态库: 🌠手动制作静态库 && 手动调用一下我们自己写的静态库 1> 安装到系统里面 ✨生成静…...
Java转Go日记(六):TCP黏包
服务端代码如下: // socket_stick/server/main.gofunc process(conn net.Conn) {defer conn.Close()reader : bufio.NewReader(conn)var buf [1024]bytefor {n, err : reader.Read(buf[:])if err io.EOF {break}if err ! nil {fmt.Println("read from client…...
(51单片机)LCD显示温度(DS18B20教程)(LCD1602教程)(延时函数教程)(单总线教程)
演示视频: LCD显示温度 源代码 如上图将9个文放在Keli5 中即可,然后烧录在单片机中就行了 烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频: 【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.…...
【通过Docker快速部署Tomcat9.0】
文章目录 前言一、部署docker二、部署Tomcat2.1 创建存储卷2.2 运行tomcat容器2.3 查看tomcat容器2.4 查看端口是否监听2.5 防火墙开放端口 三、访问Tomcat 前言 Tomcat介绍 Tomcat 是由 Apache 软件基金会(Apache Software Foundation)开发的一个开源 …...
云原生--基础篇-3--云原生概述(云、原生、云计算、核心组成、核心特点)
1、什么是云和原生 (1)、什么是云? “云”指的是云计算环境,代表应用运行的基础设施和资源。依赖并充分利用云计算的弹性、分布式和资源池化能力。 核心含义: 1、云计算基础设施 云原生应用的设计和运行完全基于云…...
Spark-Streaming
Spark-Streaming概述 DStream实操 案例一:WordCount案例 需求:使用 netcat 工具向 9999 端口不断的发送数据,通过 SparkStreaming 读取端口数据并统计不同单词出现的次数 实验步骤: 添加依赖 <dependency> <gro…...
乐视系列玩机------乐视2 x620红灯 黑砖刷写教程以及新版刷写工具的详细释义
乐视x620在上期解析了普通黑砖情况下的救砖刷机过程。但在一些例外的情况下。使用上面的步骤会一直刷写报错 。此种情况就需要另外一种强制刷写方法来救砖 通过博文了解💝💝💝 1💝💝💝-----详细解析乐视2 x620系列 红灯 黑砖线刷救砖的步骤 2💝💝💝----图…...
若依SpringCloud项目-定制微服务模块
若依SpringCloud项目-定制微服务模块 关于微服务先不过多介绍,刚开始熟悉并不能讲的很彻底,成熟的微服务项目-若依SpringCloud就是一个典型的微服务架构工程(网上有很多教程了,不明白的可以学习一下)。 我正在看的视…...
【扫描件批量改名】批量识别扫描件PDF指定区域内容,用识别的内容修改PDF文件名,基于C++和腾讯OCR的实现方案,超详细
批量识别扫描件PDF指定区域内容并重命名文件方案 应用场景 本方案适用于以下场景: 企业档案数字化管理:批量处理扫描的合同、发票等文件,按内容自动分类命名财务票据处理:自动识别票据上的关键信息(如发票号码、日期)用于归档医疗记录管理:从扫描的检查报告中提取患者I…...
学习Docker遇到的问题
目录 1、拉取hello-world镜像报错 1. 检查网络连接 排查: 2. 配置 Docker 镜像加速器(推荐) 具体解决步骤: 1.在服务器上创建并修改配置文件,添加Docker镜像加速器地址: 2. 重启Docker 3. 拉取hello-world镜像 2、删除镜像出现异常 3、 容器内部不能运行ping命令 …...
Docker 数据卷
目录 一、数据卷(Data Volume) 二、使用 1、单独建立数据卷 2、挂载主机数据卷 3、数据卷容器挂载 基本语法: 工作原理: 主要用途: 使用事例: 一、数据卷(Data Volume) 数据卷的使用,类似于 Linux 下对目录或文件进行 mount 数据卷(Data Volume)是一个可供一个或多…...
【数据结构】励志大厂版·初级(二刷复习)双链表
前引:今天学习的双链表属于链表结构中最复杂的一种(带头双向循环链表),按照安排,我们会先进行复习,如何实现双链表,如基本的头插、头删、尾删、尾插,掌握每个细节,随后进…...