爬虫框架与库
爬虫框架与库是用于网络数据抓取的核心工具,帮助开发者高效地从网页中提取结构化数据。
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&#…...
【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!
【2025全站首发】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测! 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接:P…...
数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全
信息化高速发展,数据已成为企业的核心资产,驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入,常态化的数据流通不仅促进了信息的快速传递与共享,还能帮助企业快速响应市场变化,把握商业机遇,实…...
本地大模型编程实战(24)用智能体(Agent)实现智能纠错的SQL数据库问答系统(3)
本文将实现这样一个 智能体(Agent) : 可以使用自然语言对 SQLite 数据库进行查询。即:用户用自然语言提出问题,智能体也用自然语言根据数据库的查询结果回答问题。增加一个自动对查询中的专有名词进行纠错的工具,这将明显提升查询…...
Apache DolphinScheduler系列1-单节点部署及测试报告
文章目录 整体说明一、部署环境二、版本号三、部署方案四、部署步骤4.1、上传部署包4.2、创建外部数据库4.3、修改元数据库配置4.4、上传MySQLl驱动程序4.5、初始化外部数据库4.6、启停服务4.7、访问页面五、常见问题及解决方式5.1、时间不一致5.2、异常终止5.3、大量日志5.4、…...
Java+SpringBoot+Vue+数据可视化的音乐推荐与可视化平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在互联网技术以日新月异之势迅猛发展的浪潮下,5G 通信技术的普及、云计算能力…...
LVS+Keepalived 高可用集群搭建
一、高可用集群: 1.什么是高可用集群: 高可用集群(High Availability Cluster)是以减少服务中断时间为目地的服务器集群技术它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响…...
跟着AI学vue第十二章
第十二章:技术引领与社区共建 在熟练掌握Vue开发技能,并将其与前沿技术融合应用后, 第十二章是一个更具使命感与影响力的阶段,着重于引领技术发展方向和为社区贡献力量。 1. 推动Vue技术创新与实践 探索前沿技术融合࿱…...
PydanticToolsParser 工具(tool call)把 LLM 生成的文本转成结构化的数据(Pydantic 模型)过程中遇到的坑
PydanticToolsParser 的作用 PydanticToolsParser 是一个工具,主要作用是 把 LLM 生成的文本转成结构化的数据(Pydantic 模型),让代码更容易使用这些数据进行自动化处理。 换句话说,AI 生成的文本通常是自然语言&…...
python-leetcode-乘积最大子数组
152. 乘积最大子数组 - 力扣(LeetCode) class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…...
江协科技/江科大-51单片机入门教程——P[1-1] 课程简介P[1-2] 开发工具介绍及软件安装
本教程也力求在玩好单片机的同时了解一些计算机的基本概念,了解电脑的一些基本操作,了解电路及其元器件的基本理论,为我们学习更高级的单片机,入门IT和信息技术行业,打下一定的基础。 目录 1.课程简介 2.开发工具及…...
简单介绍JVM
1.什么是JVM? JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统,运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍 2.类加载子系统 JVM中运行的就是我们日常写的JA…...
【对话推荐系统】Towards Topic-Guided Conversational Recommender System 论文阅读
Towards Topic-Guided Conversational Recommender System 论文阅读 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…...
当下弹幕互动游戏源码开发教程及功能逻辑分析
当下很多游戏开发者或者想学习游戏开发的人,想要了解如何制作弹幕互动游戏,比如直播平台上常见的那种,观众通过发送弹幕来影响游戏进程。需要涵盖教程的步骤和功能逻辑的分析。 首先,弹幕互动游戏源码开发教程部分应该分步骤&…...
STM32——HAL库开发笔记21(定时器2—输出比较)(参考来源:b站铁头山羊)
本文主要讲述输出比较及PWM信号相关知识。 一、概念 所谓输出比较,就是通过单片机的定时器向外输出精确定时的方波信号。 1.1 PWM信号 PWM信号即脉冲宽度调制信号。PWM信号的占空比 (高电压 所占周期 / 整个周期) * 100% 。所以PWM信号…...
YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
概述 实时目标检测对于许多实际应用来说已经变得至关重要,而Ultralytics公司开发的YOLO(You Only Look Once,只看一次)系列一直是最先进的模型系列,在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…...
动态内容加载的解决方案:Selenium与Playwright对比故障排查实录
方案进程 2024-09-01 09:00 | 接到亚航航班数据采集需求 2024-09-01 11:30 | 首次尝试使用Selenium遭遇Cloudflare验证 2024-09-01 14:00 | 切换Playwright方案仍触发反爬机制 2024-09-01 16:30 | 引入爬虫代理IPUA轮换策略 2024-09-02 10:00 | 双方案完整实现并通过压力测试故…...
NLP学习记录十:多头注意力
一、单头注意力 单头注意力的大致流程如下: ① 查询编码向量、键编码向量和值编码向量分别经过自己的全连接层(Wq、Wk、Wv)后得到查询Q、键K和值V; ② 查询Q和键K经过注意力评分函数(如:缩放点积运算&am…...
Spring基础01
Spring基础01 软件开发原则 OCP开闭原则:七大开发原则当中最基本的原则,其他的六个原则是为这个原则服务的。 对扩展开放,对修改关闭。在扩展系统功能的时候,没有修改之前写好的代码,就符合OCP原则,反之&a…...
Gurobi 并行计算的一些问题
最近尝试用 gurobi 进行并行计算,即同时用多个 cpu 核计算 gurobi 的 model,但是发现了不少问题。总体来看,gurobi 对并行计算的支持并不是那么好。 gurobi 官方对于并行计算的使用在这个网址,并有下面的大致代码: i…...
2025年2月,TVBOX接口最新汇总版
这里写自定义目录标题 1、离线版很必要2、关于在线版好还是离线版更实在,作个总结:★ 离线版的优点:★ 离线版的缺点: 3.1、 针对FM内置的写法;3.2、 如果是用在YSC,那么格式也要有些小小的改变3.2.1、 YSC…...
Dubbo RPC 原理
一、Dubbo 简介 Apache Dubbo 是一款高性能、轻量级的开源 RPC 框架,支持服务治理、协议扩展、负载均衡、容错机制等核心功能,广泛应用于微服务架构。其核心目标是解决分布式服务之间的高效通信与服务治理问题。 二、Dubbo 架构设计 1. 核心组件 Prov…...
qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码
qt5的中文乱码问题一直没有很明确的处理方案。 今天处理进程间通信时,也遇到了qt5乱码问题,一边是设置的GBK,一边设置的是UTF8,单向通信约定采用UTF8。 发送端保证发的是UTF8字符串,因为UTF8在网络数据包中没有字节序…...
第2章_保护您的第一个应用程序
第2章_保护您的第一个应用程序 在本章中,您将学习如何使用 Keycloak 保护您的第一个应用程序。为了让事情更有趣,您将运行的示例应用程序由两部分组成,前端 Web 应用程序和后端 REST API。这将向您展示用户如何向前端进行身份验证࿰…...
【Godot4.3】自定义圆角容器
概述 Godot控件想要完全实现现代UI风格,需要进行大量的自定义组件设计。本篇就依托于笔者自己对现代UI设计中的圆角面板元素模仿来制作圆角容器组件。 圆角容器 圆角元素在现代的扁平UI设计中非常常见,在Godot中可以通过改进PanelContainer来或者自定…...
Flutter系列教程之(5)——常用控件Widget的使用示例
目录 1.页面跳转 2.某个控件设置点击事件 3.AlertDialog对话框的使用 4.文本输入框 5.按钮 圆角扁平按钮: 圆角悬浮按钮: 6.补充 圆点 7.布局使用 Row控件左右对齐 调整边距 1.页面跳转 首先,先介绍一下页面跳转功能吧 Flutter使用 Navigator 进行页面…...
DeepSeek开源周,第三弹再次来袭,DeepGEMM
在大型模型推理中,矩阵乘法(GEMM)是计算的核心瓶颈。DeepGEMM 应运而生——一款专为 FP8精度矩阵乘法 设计的轻量级CUDA库,由深度求索(DeepSeek)团队开源。它凭借极简代码(核心仅300行ÿ…...
stm32四种方式精密控制步进电机
在搭建完clion的开发环境后,我决定重写之前的项目并优化完善,争取做出完全可落地的东西,也结合要写的论文内容一同学习下去。 因此,首当其冲的就是回到步进电机控制领域,把之前使用中断溢出进行步进电机控制的方案进行…...
C++11 智能指针:unique_ptr、shared_ptr和weak_ptr 功能特性 模拟实现
文章目录 unique_ptr功能和特性使用场景make_unique模拟实现 shared_ptr功能和特性使用场景make_shared模拟实现 weak_ptr C 中智能指针都是 RAII(Resource Acquisition Is Initialization)机制的典型应用,在构造时获取资源,在析构…...
Spring Boot启动过程?
目录 1. 启动入口 2. SpringApplication 初始化 3. 准备环境 4. 创建应用上下文(ApplicationContext) 5. 准备应用上下文 6. 刷新应用上下文 7. 启动 Web 服务器(若为 Web 应用) 8. 发布 ApplicationStartedEvent 事件 9. 执行 Runner 10. 发布 ApplicationReady…...
