爬虫框架与库

news2025/2/28 4:43:04

爬虫框架与库是用于网络数据抓取的核心工具,帮助开发者高效地从网页中提取结构化数据。

Requests:用于发送HTTP请求。

BeautifulSoup:用于解析HTML和XML。

Scrapy:强大的爬虫框架,适合大规模爬取。

Selenium:用于处理JavaScript渲染的页面。

PyQuery:类似jQuery的HTML解析库。

一、常用爬虫库(灵活轻量)

1、Requests

特点:HTTP请求库,用于发送GET/POST请求,处理Cookies和Session。

使用场景:简单网页抓取,配合解析库(如BeautifulSoup)使用。

例如:

import requests
     response = requests.get("https://emp.com")

2、BeautifulSoup

特点:HTML/XML解析库,支持多种解析器(如lxml、html.parser)。

使用场景:静态页面解析,提取标签内容。

例如:

from bs4 import BeautifulSoup
     soup = 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 BeautifulSoup

url = "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 webdriver

driver = 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 launch

async 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_playwright

with 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 scrapy

   class 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界面、分布式支持社区活跃度下降

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展,数据已成为企业的核心资产,驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入,常态化的数据流通不仅促进了信息的快速传递与共享,还能帮助企业快速响应市场变化,把握商业机遇,实…

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)是以减少服务中断时间为目地的服务器集群技术它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响…

PydanticToolsParser 工具(tool call)把 LLM 生成的文本转成结构化的数据(Pydantic 模型)过程中遇到的坑

PydanticToolsParser 的作用 PydanticToolsParser 是一个工具,主要作用是 把 LLM 生成的文本转成结构化的数据(Pydantic 模型),让代码更容易使用这些数据进行自动化处理。 换句话说,AI 生成的文本通常是自然语言&…

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; 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] 开发工具介绍及软件安装

本教程也力求在玩好单片机的同时了解一些计算机的基本概念&#xff0c;了解电脑的一些基本操作&#xff0c;了解电路及其元器件的基本理论&#xff0c;为我们学习更高级的单片机&#xff0c;入门IT和信息技术行业&#xff0c;打下一定的基础。 目录 1.课程简介 2.开发工具及…

简单介绍JVM

1.什么是JVM&#xff1f; JVM就是Java虚拟机【Java Virtual Machine】&#xff0c;简称JVM。主要部分包括类加载子系统&#xff0c;运行时数据区&#xff0c;执行引擎&#xff0c;本地方法库等&#xff0c;接下来我们一一介绍 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…

当下弹幕互动游戏源码开发教程及功能逻辑分析

当下很多游戏开发者或者想学习游戏开发的人&#xff0c;想要了解如何制作弹幕互动游戏&#xff0c;比如直播平台上常见的那种&#xff0c;观众通过发送弹幕来影响游戏进程。需要涵盖教程的步骤和功能逻辑的分析。 首先&#xff0c;弹幕互动游戏源码开发教程部分应该分步骤&…

STM32——HAL库开发笔记21(定时器2—输出比较)(参考来源:b站铁头山羊)

本文主要讲述输出比较及PWM信号相关知识。 一、概念 所谓输出比较&#xff0c;就是通过单片机的定时器向外输出精确定时的方波信号。 1.1 PWM信号 PWM信号即脉冲宽度调制信号。PWM信号的占空比 &#xff08;高电压 所占周期 / 整个周期&#xff09; * 100% 。所以PWM信号…

YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合

概述 实时目标检测对于许多实际应用来说已经变得至关重要&#xff0c;而Ultralytics公司开发的YOLO&#xff08;You Only Look Once&#xff0c;只看一次&#xff09;系列一直是最先进的模型系列&#xff0c;在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…

动态内容加载的解决方案: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学习记录十:多头注意力

一、单头注意力 单头注意力的大致流程如下&#xff1a; ① 查询编码向量、键编码向量和值编码向量分别经过自己的全连接层&#xff08;Wq、Wk、Wv&#xff09;后得到查询Q、键K和值V&#xff1b; ② 查询Q和键K经过注意力评分函数&#xff08;如&#xff1a;缩放点积运算&am…

Spring基础01

Spring基础01 软件开发原则 OCP开闭原则&#xff1a;七大开发原则当中最基本的原则&#xff0c;其他的六个原则是为这个原则服务的。 对扩展开放&#xff0c;对修改关闭。在扩展系统功能的时候&#xff0c;没有修改之前写好的代码&#xff0c;就符合OCP原则&#xff0c;反之&a…

2025年2月,TVBOX接口最新汇总版

这里写自定义目录标题 1、离线版很必要2、关于在线版好还是离线版更实在&#xff0c;作个总结&#xff1a;★ 离线版的优点&#xff1a;★ 离线版的缺点&#xff1a; 3.1、 针对FM内置的写法&#xff1b;3.2、 如果是用在YSC&#xff0c;那么格式也要有些小小的改变3.2.1、 YSC…

Dubbo RPC 原理

一、Dubbo 简介 Apache Dubbo 是一款高性能、轻量级的开源 RPC 框架&#xff0c;支持服务治理、协议扩展、负载均衡、容错机制等核心功能&#xff0c;广泛应用于微服务架构。其核心目标是解决分布式服务之间的高效通信与服务治理问题。 二、Dubbo 架构设计 1. 核心组件 Prov…

第2章_保护您的第一个应用程序

第2章_保护您的第一个应用程序 在本章中&#xff0c;您将学习如何使用 Keycloak 保护您的第一个应用程序。为了让事情更有趣&#xff0c;您将运行的示例应用程序由两部分组成&#xff0c;前端 Web 应用程序和后端 REST API。这将向您展示用户如何向前端进行身份验证&#xff0…

【Godot4.3】自定义圆角容器

概述 Godot控件想要完全实现现代UI风格&#xff0c;需要进行大量的自定义组件设计。本篇就依托于笔者自己对现代UI设计中的圆角面板元素模仿来制作圆角容器组件。 圆角容器 圆角元素在现代的扁平UI设计中非常常见&#xff0c;在Godot中可以通过改进PanelContainer来或者自定…

Flutter系列教程之(5)——常用控件Widget的使用示例

目录 1.页面跳转 2.某个控件设置点击事件 3.AlertDialog对话框的使用 4.文本输入框 5.按钮 圆角扁平按钮: 圆角悬浮按钮: 6.补充 圆点 7.布局使用 Row控件左右对齐 调整边距 1.页面跳转 首先&#xff0c;先介绍一下页面跳转功能吧 Flutter使用 Navigator 进行页面…