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

python 爬虫框架介绍

文章目录

  • 前言
  • 一、Requests + BeautifulSoup(基础组合)
  • 二、Scrapy(高级框架)
  • 三、PySpider(可视化爬虫)
  • 四、Selenium(浏览器自动化)
  • 五、Playwright(新一代浏览器自动化)


前言

Python 提供了多种强大的爬虫框架,适用于不同场景和需求。以下是主流框架的详细介绍及对比分析:


一、Requests + BeautifulSoup(基础组合)

特点:

  • Requests:HTTP 请求库,简单易用
  • BeautifulSoup:HTML/XML 解析库,灵活强大
  • 适合场景:中小型网站、结构规则的页面
    示例代码:
import requests
from bs4 import BeautifulSoupurl = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')# 提取所有链接
links = [a['href'] for a in soup.find_all('a', href=True)]# 提取特定元素
title = soup.find('h1').text

二、Scrapy(高级框架)

特点:

  • 全功能爬虫框架,支持异步、分布式
  • 内置调度器、下载器、解析器
  • 自动处理 cookies、会话、重试等
  • 适合场景:大型网站、高性能需求
    示例代码:
import scrapyclass ExampleSpider(scrapy.Spider):name = "example"start_urls = ["https://example.com"]def parse(self, response):# 提取数据for item in response.css('div.item'):yield {'title': item.css('h2::text').get(),'link': item.css('a::attr(href)').get(),}# 跟进链接next_page = response.css('a.next-page::attr(href)').get()if next_page:yield response.follow(next_page, self.parse)
运行命令:
bash
scrapy startproject myproject
scrapy genspider example example.com
scrapy crawl example -o items.json

三、PySpider(可视化爬虫)

特点:

  • 可视化界面,支持 Web 端操作
  • 支持 JavaScript 渲染(PhantomJS/Selenium)
  • 内置任务队列和结果存储
  • 适合场景:需要可视化监控的爬虫
    安装与启动:
pip install pyspider
pyspider all

示例代码:

from pyspider.libs.base_handler import *class Handler(BaseHandler):@every(minutes=24 * 60)def on_start(self):self.crawl('https://example.com', callback=self.index_page)@config(age=10 * 24 * 60 * 60)def index_page(self, response):for each in response.doc('a[href^="http"]').items():self.crawl(each.attr.href, callback=self.detail_page)def detail_page(self, response):return {"url": response.url,"title": response.doc('title').text(),}

四、Selenium(浏览器自动化)

特点:

  • 控制真实浏览器,支持 JavaScript 渲染
  • 适用于需要用户交互的场景
  • 性能较低,适合小规模数据采集
    示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service# 设置 ChromeDriver 路径
service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service)driver.get('https://example.com')# 等待元素加载
element = driver.find_element(By.CSS_SELECTOR, 'button.submit')
element.click()# 提取数据
data = driver.find_element(By.CSS_SELECTOR, 'div.result').text
driver.quit()

五、Playwright(新一代浏览器自动化)

特点:

  • 由 Microsoft 开发,支持多浏览器
  • 自动化操作高效,支持无头模式
  • 内置等待、断言等功能
    示例代码:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://example.com')# 填写表单page.fill('input[name="search"]', 'Python')page.click('button[type="submit"]')# 等待结果page.wait_for_selector('div.result-item')# 提取数据results = page.query_selector_all('div.result-item')for result in results:print(result.text_content())browser.close()

相关文章:

python 爬虫框架介绍

文章目录 前言一、Requests BeautifulSoup(基础组合)二、Scrapy(高级框架)三、PySpider(可视化爬虫)四、Selenium(浏览器自动化)五、Playwright(新一代浏览器自动化&…...

window 显示驱动开发-使用有保证的协定 DMA 缓冲区模型

Windows Vista 的显示驱动程序模型保证呈现设备的 DMA 缓冲区和修补程序位置列表的大小。 修补程序位置列表包含 DMA 缓冲区中命令引用的资源的物理内存地址。 在有保证的协定模式下,用户模式显示驱动程序知道 DMA 缓冲区和修补程序位置列表的确切大小,…...

蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)

本文介绍蓝牙协议从物理层到应用层的完整通信流程,并详解了 Linux 下主流蓝牙调试工具的使用方法,适用于嵌入式蓝牙驱动开发、BLE调试、通信协议分析等场景。 🔧 1. 蓝牙架构概览 ✅ 芯片架构 单模芯片:仅支持 BLE 或 Classic 蓝…...

预测模型开发与评估:基于机器学习的数据分析实践

在当今数据驱动的时代,预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验,探讨从数据清洗到模型优化的完整过程,并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…...

提高表达能力

你遇到的这种情况其实很常见,背后的原因可能涉及思维模式、心理状态和表达习惯的综合作用。以下是具体分析和解决方案: 1. 原因分析:为什么讨论时流畅,独自表达却卡壳? 外部反馈缺失:讨论时对方的提问、反…...

【更新】全国省市县-公开手机基站数据集(2006-2025.3)

手机基站是现代通信网络中的重要组成部分,它们为广泛的通信服务提供基础设施。随着数字化进程的不断推进,手机基站的建设与布局对优化网络质量和提升通信服务水平起着至关重要的作用,本分享数据可帮助分析移动通信网络的发展和优化。本次数据…...

基于MNIST数据集的手写数字识别(CNN)

目录 一,模型训练 1.1 数据集介绍 1.2 CNN模型层结构 1.3 定义CNN模型 1.4 神经网络的前向传播过程 1.5 数据预处理 1.6 加载数据 1.7 初始化 1.8 模型训练过程 1.9 保存模型 二,模型测试 2.1 定义与训练时相同的CNN模型架构 2.2 图像的预处…...

MYSQL创建索引的原则

创建索引的原则包括: 表中的数据量超过10万以上时考虑创建索引。 选择查询频繁的字段作为索引,如查询条件、排序字段或分组字段。 尽量使用复合索引,覆盖SQL的返回值。 如果字段区分度不高,可以将其放在组合索引的后面。 对于…...

运行Spark程序-在shell中运行

Spark Shell运行程序步骤 启动Spark Shell 根据语言选择启动命令: Scala版本(默认):执行spark-shellPython版本:执行pyspark 数据加载示例 读取本地文本文件: // Scala版本 val textData sc.textFile(…...

idea Maven 打包SpringBoot可执行的jar包

背景&#xff1a;当我们需要坐联调测试的时候&#xff0c;需要对接前端同事&#xff0c;则需要打包成jar包直接运行启动服务 需要将项目中的pom文件增加如下代码配置&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</gr…...

HarmonyOs开发之——— ArkWeb 实战指南

HarmonyOs开发之——— ArkWeb 实战指南 谢谢关注!! 前言:上一篇文章主要介绍HarmonyOs开发之———合理使用动画与转场:CSDN 博客链接 一、ArkWeb 组件基础与生命周期管理 1.1 Web 组件核心能力概述 ArkWeb 的Web组件支持加载本地或在线网页,提供完整的生命周期回调体…...

国标GB/T 12536-90滑行试验全解析:纯电动轻卡行驶阻力模型参数精准标定

摘要 本文以国标GB/T 12536-90为核心框架&#xff0c;深度解析纯电动轻卡滑行试验的完整流程与数据建模方法&#xff0c;提供&#xff1a; 法规级试验规范&#xff1a;从环境要求到数据采集全流程详解行驶阻力模型精准标定&#xff1a;最小二乘法求解 ( FAv^2BvC ) 的MATLAB实…...

初识——QT

QT安装方法 一、项目创建流程 创建项目 入口&#xff1a;通过Qt Creator的欢迎页面或菜单栏&#xff08;文件→新建项目&#xff09;创建新项目。 项目类型&#xff1a;选择「Qt Widgets Application」。 路径要求&#xff1a;项目路径需为纯英文且不含特殊字符。 构建系统…...

几何_平面方程表示_点+向量形式

三维平面方程可以写成&#xff1a; π : n ⊤ X d 0 \boxed{\pi: \mathbf{n}^\top \mathbf{X} d 0} π:n⊤Xd0​ &#x1f4d0; 一、几何直观解释 ✅ 平面是“法向量 平面上一点”定义的集合 一个平面可以由&#xff1a; 一个单位法向量 n ∈ R 3 \mathbf{n} \in \mat…...

学习alpha

(sign(ts_delta(volume, 1)) * (-1 * ts_delta(close, 1))) 这个先用sign操作符 sign.如果输入NaN则返回NaN 在金融领域&#xff0c;符号函数 sign(x) 与 “基础”&#xff08;Base&#xff09;的组合概念可结合具体场景解读&#xff0c;以下从不同金融场景分析其潜在意义&…...

Java - Junit框架

单元测试&#xff1a;针对最小的功能单元(方法)&#xff0c;编写测试代码对该功能进行正确性测试。 Junit&#xff1a;Java语言实现的单元测试框架&#xff0c;很多开发工具已经集成了Junit框架&#xff0c;如IDEA。 优点 编写的测试代码很灵活&#xff0c;可以指某个测试方法…...

秒删node_modules[无废话版]

“npm install”命令带来的便利和高效让人感到畅快&#xff0c;但删除依赖包时却可能带来诸多困扰。特别是在项目依赖关系较为复杂的情况下&#xff0c;node_modules文件夹的体积往往会膨胀至数百MB甚至几个GB&#xff0c;手动删除时进度条长时间转圈&#xff0c;令人感到焦虑和…...

kkFileView文件文档在线预览镜像分享

kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 开源项目地址 https://gitee.com/kek…...

实例分割AI数据标注 ISAT自动标注工具使用方法

文章目录 🌕ISAT安装和启动方法🌕下载和使用AI分割模型🌙SAM模型性能排行🌙手动下载sam模型 & sam模型下载路径🌕使用方法🌙从file中导入图片🌙点击左上角的图标进入分割模式🌙鼠标左键点击画面中的人则自动标注🌙点击右键该区域不标注🌙一个人一个人的…...

Qt图表绘制(QtCharts)- 性能优化(13)

文章目录 1 批量替换代替追加1.1 测试11.2 测试21.3 测试3 2 开启OpenGL2.1 测试12.2 测试22.3 测试32.4 测试4 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;QtCharts绘图 &#x1f448;&#x1f449;python开发 &#x1f…...

Spring Cloud动态配置刷新:@RefreshScope与@Component的协同机制解析

在微服务架构中&#xff0c;动态配置管理是实现服务灵活部署、快速响应业务变化的关键能力之一。Spring Cloud 提供了基于 RefreshScope 和 Component 的动态配置刷新机制&#xff0c;使得开发者可以在不重启服务的情况下更新配置。 本文将深入解析 RefreshScope 与 Component…...

部署docker上的redis,idea一直显示Failed to connect to any host resolved for DNS name

参考了https://blog.csdn.net/m0_74216612/article/details/144145127 这篇文章&#xff0c;关闭了centos的防火墙&#xff0c;也修改了redis.conf文件&#xff0c;还是一直显示Failed to connect to any host resolved for DNS name。最终发现是腾讯云服务器那一层防火墙没…...

如何在 Windows 10 或 11 上使用命令提示符安装 PHP

我们可以在 Windows 上从其官方网站下载并安装 PHP 的可执行文件,但使用命令提示符或 PowerShell 更方便。 PHP 并不是一种新的或不为人知的脚本语言,它已经存在并被全球数千名网络开发人员使用。它以开源许可并分发,广泛用于 LAMP 堆栈中。然而,与 Linux 相比,它在 Wind…...

RK3588 ADB使用

安卓adb操作介绍 adb&#xff08;Android Debug Bridge&#xff09;是一个用于与安卓设备进行通信和控制的工具。adb可以通过USB或无线网络连接安卓设备&#xff0c;执行各种命令&#xff0c;如安装和卸载应用&#xff0c;传输文件&#xff0c;查看日志&#xff0c;运行shell命…...

Vue 3.0双向数据绑定实现原理

Vue3 的数据双向绑定是通过响应式系统来实现的。相比于 Vue2&#xff0c;Vue3 在响应式系统上做了很多改进&#xff0c;主要使用了 Proxy 对象来替代原来的 Object.defineProperty。本文将介绍 Vue3 数据双向绑定的主要特点和实现方式。 1. 响应式系统 1.1. Proxy对象 Vue3 …...

Please install it with pip install onnxruntime

无论怎么安装都是 Please install it with pip install onnxruntime 我python 版本是3.11 &#xff0c;我换成3.10 解决了...

java -jar命令运行 jar包时如何运行外部依赖jar包

java -jar命令运行 jar包时如何运行外部依赖jar包 场景&#xff1a; 打包发不完,运行时。发现一个问题&#xff0c; java java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils 显示此&#xff0c;基本表明&#xff0c;没有这个依赖&#xff0c;如果在开发…...

低损耗高效能100G O Band DWDM 10km光模块 | 支持密集波分复用

目录 前言 一、产品概述 100G QSFP28 O Band DWDM 10km光模块核心特点包括&#xff1a; 二、为何选择O Band DWDM方案&#xff1f; 1.低色散损耗&#xff0c;传输更稳定 2.兼容性强 三、典型应用场景 1.数据中心互联&#xff08;DCI&#xff09; 2.企业园区/智慧城市组网 3.电信…...

【解决分辨数字】2021-12-16

缘由用C语言解决分辨数字-编程语言-CSDN问答 int a 0, w 0, aa[6]{};cin >> a;while (a)aa[w] a % 10, a / 10, w;cout << w << endl;while (a<w)cout << aa[a] << ends, aa[5] * 10, aa[5] aa[a];cout << endl << aa[5] <…...

el-tree结合checkbox实现数据回显

组件代码 <el-tree:data"vertiList"show-checkboxnode-key"id":props"defaultProps"ref"treeRefx"class"custom-tree"check-change"handleCheckChange"> </el-tree>获取选择的节点 handleCheckChan…...