爬虫框架与库
爬虫框架与库是用于网络数据抓取的核心工具,帮助开发者高效地从网页中提取结构化数据。
Requests:用于发送HTTP请求。
BeautifulSoup:用于解析HTML和XML。
Scrapy:强大的爬虫框架,适合大规模爬取。
Selenium:用于处理JavaScript渲染的页面。
PyQuery:类似jQuery的HTML解析库。
一、常用爬虫库(灵活轻量)
1、Requests
特点:HTTP请求库,用于发送GET/POST请求,处理Cookies和Session。
使用场景:简单网页抓取,配合解析库(如BeautifulSoup)使用。
例如:
import requestsresponse = requests.get("https://emp.com")
2、BeautifulSoup
特点:HTML/XML解析库,支持多种解析器(如lxml、html.parser)。
使用场景:静态页面解析,提取标签内容。
例如:
from bs4 import BeautifulSoupsoup = BeautifulSoup(html_content,"lxml")title = soup.find("h1").text
3、lxml
特点:高性能XML/HTML解析库,支持XPath。
使用场景:需要快速处理大规模结构化数据。
4、Selenium
特点:自动化浏览器工具,可模拟用户操作(点击,滚动等)。
使用场景:动态渲染页面(如JavaScript加载的内容)。
缺点:资源消耗大,速度较慢。
5、Pyppeteer
特点:基于Chromium的无头浏览器,类似Puppeteer(Node.js)。
使用场景:处理复杂动态页面,支持异步操作。
二、常用爬虫框架(结构化,可扩展)
1、Scrapy
特点:
- 完整的爬虫框架,内置请求调度,数值管道,中间件等功能。
- 支持异步处理,适合大规模抓取。
使用场景:复杂项目(如电商商品爬虫,新闻聚合)。
核心组件:
- Spiders(定义抓取逻辑)
- Items(结构化数据容器)
- Pipelines(数据清洗、存储)
- Middlewares(扩展请求/响应处理)
2、PySpider
特点:
- 分布式架构,支持web界面管理任务。
- 实时监控爬虫状态。
使用场景:需要分布式协作或可视化的项目。
3、Playwright
特点:
- 支持多浏览器(Chromium、Firefox、WebKit)自动化。
- 可处理动态内容,生成截图或PDF。
使用场景:复杂交互页面(如登录验证)。
三、反爬虫应对工具
1、代理IP池
工具:requests-html,scrapy-rotating-proxies
用途:防止IP被封禁。
2、随机User-Agent
库:fake-useragent
用途:模拟不同浏览器/设备。
3、验证码识别
工具:Tesseract OCR(图像识别)、第三方 API(如打码平台)。
4、请求频率控制
方法:设置延迟(time.sleep)或使用Scrapy的DOWNLOAD_DELAY。
四、数据处理与存储
1、数据清洗
工具:Pandas(结构化数据)、正则表达式(re模块)。
2、存储方案
数据库:MySQL、MongoDB、Redis。
文件:CSV、JSON、Excel。
云服务:AWS S3、Google Cloud Storage。
五、选择依据
简单任务:Requests + BeautifulSoup/lxml。
动态页面:Selenium/Playwright/Pyppeteer。
大型项目:Scrapy(扩展性强)、PySpider(分布式)。
反爬严格:结合代理、User-Agent轮换、请求频率控制。
六、注意事项
1、合法性:遵守目标网站的 `robots.txt`,避免侵犯隐私或版权。
2、道德性:控制抓取频率,防止对服务器造成压力。
3、异常处理:增加重试机制(如 `retrying` 库)应对网络波动。
4、设置请求头:模拟浏览器行为,避免被封禁。
headers = {"User-Agent": "Mozilla/5.0"}requests.get(url, headers=headers)
5、处理反爬:使用代理 IP、随机延时、验证码识别等。
6、数据存储:结合数据库(如 MySQL、MongoDB)或文件(JSON、CSV)。
七、爬虫工具和框架的用法及实战案例总结
1、Requests + BeautifulSoup/lxml
特点:
- Requests:发送 HTTP 请求,获取网页内容。
- BeautifulSoup:解析 HTML/XML 数据,语法简单。
- lxml:高性能解析库,支持 XPath。
基本用法:
import requests
from bs4 import BeautifulSoupurl = "https://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml") # 使用 lxml 解析器
title = soup.find("h1").text
实战案例:抓取新闻标题
url = "https://news.ycombinator.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = [a.text for a in soup.select(".titleline > a")]
print(titles)
2、Selenium
特点:
- 模拟浏览器操作,处理动态加载内容(如 JavaScript)。
- 支持 Chrome、Firefox 等浏览器。
基本用法
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://example.com")
element = driver.find_element("tag name", "h1")
print(element.text)
driver.quit()
实战案例:自动登录并抓取数据
driver = webdriver.Chrome()
driver.get("https://login.example.com")
driver.find_element("id", "username").send_keys("user")
driver.find_element("id", "password").send_keys("pass")
driver.find_element("id", "submit").click()
# 登录后抓取数据
data = driver.find_element("class name", "data").text
driver.quit()
3. Pyppeteer(已不推荐,推荐 Playwright)
特点:
- 基于 Chromium 的异步无头浏览器。
- 类似 Puppeteer(Node.js),但已停止维护。
基本用法:
import asyncio
from pyppeteer import launchasync def main():browser = await launch()page = await browser.newPage()await page.goto("https://example.com")title = await page.title()await browser.close()asyncio.get_event_loop().run_until_complete(main())
4. Playwright
特点:
- 支持多浏览器(Chromium、Firefox、WebKit)。
- 异步操作,性能更高,维护更活跃。
基本用法:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://example.com")print(page.title())browser.close()
实战实例:抓取动态渲染内容
with sync_playwright() as p:browser = p.chromium.launch(headless=True)page = browser.new_page()page.goto("https://spa.example.com")page.wait_for_selector(".dynamic-content")content = page.query_selector(".dynamic-content").text_content()print(content)
5. Scrapy
基本用法:
1、创建项目:
scrapy startproject myproject
2. 编写 Spider:
import scrapyclass MySpider(scrapy.Spider):name = "example"start_urls = ["https://example.com"]def parse(self, response):yield {"title": response.css("h1::text").get()}
3. 运行:
scrapy crawl example -o output.json
实战案例:抓取电商商品信息
class ProductSpider(scrapy.Spider):name = "product"start_urls = ["https://shop.example.com"]def parse(self, response):for product in response.css(".product-item"):yield {"name": product.css("h2::text").get(),"price": product.css(".price::text").get(),}next_page = response.css("a.next-page::attr(href)").get()if next_page:yield response.follow(next_page, self.parse)
6. PySpider
特点:
- 分布式爬虫框架,自带 Web 界面。
- 适合实时监控和调度。
基本用法:
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):return {"title": response.doc("h1").text()}
工具对比与选型
工具 | 使用场景 | 优点 | 缺点 |
Requests | 简单静态页面 | 轻量、易用 | 无法处理动态内容 |
Selenium | 动态渲染页面(少量请求) | 支持浏览器操作 | 性能低,资源占用高 |
Playwright | 动态渲染页面(高性能) | 多浏览器支持、异步 | 学习成本略高 |
Scrapy | 大规模数据抓取 | 完整框架、扩展性强 | 配置复杂 |
PySpider | 分布式爬取与实时监控 | web界面、分布式支持 | 社区活跃度下降 |
相关文章:
爬虫框架与库
爬虫框架与库是用于网络数据抓取的核心工具,帮助开发者高效地从网页中提取结构化数据。 Requests:用于发送HTTP请求。 BeautifulSoup:用于解析HTML和XML。 Scrapy:强大的爬虫框架,适合大规模爬取。 Selenium&#…...

PyTorch常用函数总结(持续更新)
本文主要记录自己在用 PyTorch复现经典模型 过程中遇到的一些函数及用法,以期对 常见PyTorch函数 更加熟练~ 官方Docs:PyTorch documentation — PyTorch 2.6 documentation 目录 数据层面 torch.sign(tensor) torch.tensor(np.eye(3)[y]) torch.on…...
代码异常(js中push)NO.4
1. 环境 Vue3,Element Plsu 2. 示例代码 const { updateBy, updateTime, ...curObj } form.valuecurObj.id props.tableData.length 1var newTableData props.tableData.push(curObj)updateTableData(newTableData)3. 情景描述 newTableData变成了整数&#…...

Anaconda 2025 最新版安装与Python环境配置指南(附官方下载链接)
一、软件定位与核心功能 Anaconda 2025 是Python/R数据科学集成开发平台,预装1500科学计算库,新增AI模型可视化调试、多环境GPU加速等特性。相较于传统Python安装,其优势包括: 环境隔离:通过conda工具实现多版本Pyth…...
Vue 中动态实现进度条
在 Vue 中动态实现进度条,基本上有两种常见的方法:直接通过 Vue 数据绑定控制样式,或者利用外部库来实现更复杂的功能。我们会深入探讨这两种方式,并且详细说明每种方法的实现步骤、优缺点以及使用场景。 1. 使用 Vue 数据绑定来…...
CSS滚动条原理与自定义样式指南,CSS滚动条样式失效,滚动条样式无效,-webkit-scrollbar无效,overflow不显示滚动条
滚动内容形成的必要条件 CSS Overflow属性解析 MDN官方文档-Overflow属性 菜鸟教程-Overflow属性 overflow 属性控制内容溢出元素框时在对应的元素区间内是否添加滚动条。 值描述visible默认值。内容不会被修剪,会呈现在元素框之外。hidden内容会被修剪…...
Three.js 入门(辅助、位移、父子关系、缩放旋转、响应式布局)
本篇主要学习内容 : 三维坐标系与辅助坐标系物体位移与父子元素物体的缩放与物体的旋转设置响应式画布与全屏控制 点赞 关注 收藏 学会了 本文使用 Three.js 的版本:171 基于 Vue3vite开发调试 1.三维坐标系与辅助坐标系 1.1) 导入three和轨道控制器 // 导入…...
python算法-用递归打印数字3的幂--Day017
文章目录 前言采用创新方式,精选趣味、实用性强的例子,从不同难度、不同算法、不同类型和不同数据结构进行总结,全面提升算法能力。例1.用递归打印数字例2.相对排名 总结 前言 采用创新方式,精选趣味、实用性强的例子,…...
Selenium 与 Coze 集成
涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…...
AWS CLI将读取器实例添加到Amazon Aurora集群
Amazon Aurora是AWS提供的一种兼容MySQL和PostgreSQL的关系数据库服务。Aurora集群由一个写入器实例和多个读取器实例组成,可以提供高可用性、高性能和可扩展性。在本文中,我们将介绍如何使用AWS命令行界面(CLI)将读取器实例添加到现有的Aurora集群中。 © ivwdcwso (ID: u…...

NTS库学习,找bug中......
基础知识 Coordinate: 表示一个二维坐标点,包括 X 和 Y 坐标值。 CoordinateSequence: 由一系列 Coordinate 对象组成的序列,可以表示线、多边形等几何对象的顶点。 CoordinateFilter: 用于对几何对象的坐标进行过滤或修改的接口。 Geometry: 表示一个几…...
五十天精通硬件设计第40天-硬件测试流程
目录 一、硬件测试流程概述 二、详细测试流程 1. 需求分析与测试计划 2. 测试环境搭建 3. 测试执行 3.1 基本功能测试 3.2 性能测试 3.3 环境与可靠性测试 3.4 安全与合规性测试 4. 问题分析与调试 5. 回归测试与报告输出 三、关键注意事项 四、常见问题与解决 五…...

R语言安装教程(附安装包)R语言4.3.2版本安装教程
文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手,还是希望更新知识体系的专业人士,只要按照本…...

数据库 安装initializing database不通过
出现一下情况时: 处理方法: 将自己的电脑名称 中文改成英文 即可通过...

自动驾驶两个传感器之间的坐标系转换
有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car,需要转换到相机坐标系下,旋转矩阵R_car2Cam,平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1:先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…...
信号——进程间通信(20250225)
1. 信号 管道:进程间数据通信(同步通信) 信号:进程间通信,用来发送通知(异步通信,中断) 1)同步通信:发送端和接收端,使用同一时钟通信 异步通信:发送端和接收端使用不同时钟通信 …...
transformer架构嵌入层位置编码之动态NTK-aware位置编码
前文,我们已经构建了一个小型的字符级语言模型,是在transformer架构基础上实现的最基本的模型,我们肯定是希望对该模型进行改进和完善的。所以我们的另外一篇文章也从数据预处理、模型架构、训练策略、评估方法、代码结构、错误处理、性能优化等多个方面提出具体的改进点,但…...

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急
《港湾商业观察》施子夫 近期,东信营销科技有限公司(以下简称,东信营销科技)递表港交所,联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…...

[电感、磁珠、0欧姆电阻]的区别与应用特性
1. 电感(Inductor) 基础特性: 储能元件:通过磁场存储能量,阻碍电流突变()。 核心参数:电感值(L)、额定电流、直流电阻(DCR)、自谐振频率(SRF)。 频率特性:感抗 ,(通直流、阻交流),低频时阻抗低,高频时阻抗高(但受SRF限制)。 电路符号及实物:多为绕线结…...

车载诊断架构 --- LIN节点路由转发注意事项
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...