scrapling框架源码5/19

源码结构如下:

https://dcnsre5ugu1w.feishu.cn/sync/RNvRd7bnOsMwRFbDuHNcKKywnkc

图片

  1. init .py:

    入口,导出类核心

    图片

  2. 爬虫框架核心

    图片

  3. Spider基类:先从这里开始读

  4. 跑了的第一个例子,

    指令如下:

    E:\Scrapling2>uv run python agent-skill\Scrapling-Skill\examples\01_fetcher_session.py

    部分输出结果如下:

    E:\Scrapling2>uv run python agent-skill\Scrapling-Skill\examples\01_fetcher_session.py

    2026-05-19 19:13:23 INFO: Fetched (200) <GET https://quotes.toscrape.com/page/1/\> (referer: https://www.google.com/)

    第 1页: 10 条引用 (状态: 200)

    2026-05-19 19:13:23 INFO: Fetched (200) <GET https://quotes.toscrape.com/page/2/\> (referer: https://www.google.com/)

    第 2页: 10 条引用 (状态: 200)

    ...

    总数: 100 条引用

  5. "The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking."

  6. "It is our choices, Harry, that show what we truly are, far more than our abilities."

  7. 其中用到一个我不认识的库

    browserforge

    browserforge 是用来生成随机浏览器指纹的库,帮助绕过反爬检测

    具体功能:

    它能生成随机的:

    browserforge.generate.user_agent() # 随机User-Agent

    browserforge.generate.screen() # 随机屏幕分辨率

    browserforge.generate.webgl() # WebGL指纹

    browserforge.generate.canvas() # Canvas指纹

  • 生成随机的 User-Agent、Accept-Language 等请求头
  • 随机化 TLS/SSL 指纹(JA3/JA4)
  • 随机化 HTTP/2 头部
  • 生成随机化的浏览器配置文件
    这个库在Scrapling里的作用:
    Scrapling 的 StealthyFetcher / curl_cffi

    browserforge 生成随机指纹

    让请求看起来像真实浏览器

    绕过反爬(Cloudflare/Pulse/PerimeterX等)
    这是一个agent skill
  1. 第二个源码的例子
    指令如下:
    uv run python agent-skill\Scrapling-Skill\examples\02_dynamic_session.py
    遇到个我没见过的东西:msgspec
    msgspec 是一个高性能的结构化数据库,用于序列化、验证和转换 JSON/MessagePack 等格式。
  2. 示例3:源码翻译:
    """
    示例 3:Python - StealthySession(Patchright 隐形浏览器,可见)
    使用持久的隐身浏览器会话抓取 quotes.toscrape.com 的全部 10 页内容。
    自动绕过反爬虫保护(Cloudflare Turnstile、指纹识别等)。
    最适合:防护良好的网站、Cloudflare 保护的页面、能检测到 Playwright 的网站。
    将 headless 设置为 True 可以在后台运行浏览器。
    添加 solve_cloudflare=True 可以自动解决 Cloudflare 验证。"""
  3. 示例3中遇到的库:patchright
    patchright 是 Playwright 的强化版(apify 团队维护),专门解决 Playwright 被反爬检测的问题
  4. 第四个例子:源码注释翻译
    """
    示例 4:Python - 爬虫(自动爬取框架)
    自动抓取 quotes.toscrape.com 网站的所有页面,通过点击"下一页"分页链接实现。无需手动循环页面。
    该蜘蛛程序生成结构化的项目(文本 + 作者 + 标签)并将其导出为 JSON 格式。
    最适合:多页抓取、全站抓取、任何需要分页或跨多页链接跟踪的情况。
    输出:
  • 爬取过程中实时统计信息输出到终端
  • 爬取结束时的最终统计信息
  • 当前目录下的 quotes.json 文件"""
    第四个例子没遇见过的库:protego
    protego 是 Python 的 Protocol Buffers 实现库。
  1. class Spider(ABC):源码注释翻译:
    "用于创建网络爬虫的抽象基类。
    请访问文档网站以获取更多信息。"""
    ABC = Abstract Base Class()
    ABC是Python标准库的类,用于定义抽象基类
    from abc import ABC, abstractmethod

class Spider(ABC):

@abstractmethod

def parse(self, response):

"""子类必须实现这个方法,否则报错"""

pass

如果直接实例化 Spider,会报错:

spider = Spider() # ❌ TypeError: Can't instantiate abstract class Spider with abstract methods parse

子类必须实现 parse() 才能实例化:

class MySpider(Spider):

async def parse(self, response): # ✅ 必须实现

...

作用:强制子类必须实现parse()方法,否则爬虫无法工作

name: Optionalstr = None

  1. Optionalstr是python typing模块的类型注解

from typing import Optional, Union

完整写法:

name: Optionalstr = None

等价于:

name: Unionstr, None = None

等价于(Python 3.10+):

name: str | None = None

意思是:name 可以是字符串,也可以是 None

Name是必须填写的:

Spider.init 里会检查:

if self.name is None:

raise ValueError(f"{self.class .name} must have a name.")

正确用法:

class QuotesSpider(Spider):

name = "quotes" # ✅ 必须给名字

基类定义(父类)

class Spider(ABC):

name: Optionalstr = None

start_urls: liststr = \[\] # 有默认值,可以被子类覆盖

子类继承(传进来)

class MySpider(Spider):

name = "my-spider"

start_urls = "https://example.com" # 覆盖父类的默认值

类属性默认值,子类覆盖之后生效

  1. allowed_domains: Setstr = set()

限定爬虫的爬取范围

相关推荐
石山代码1 小时前
类型限定符的底层实现原理是什么?
python
雾沉川1 小时前
PyCharm 2025.2 完整安装与配置技术教程
ide·python·pycharm
眠りたいです1 小时前
LangChainv1:agent快速上手与中间件认识
人工智能·python·中间件·langchain·langgraph
2601_956319881 小时前
期货报单被拒怎么识别与处理:order 状态与 last_msg 用法
python·区块链
yijianace2 小时前
Python爬虫实战:分页爬取 + 详情页采集 + CSV存储
前端·爬虫·python
蜂蜜黄油呀土豆2 小时前
Agent 循环:观察、思考、行动(ReAct 入门)
python·ai·大模型·react·js
SilentSamsara2 小时前
特征工程系统方法论:编码、分箱、交互特征与特征选择
开发语言·人工智能·python·机器学习·青少年编程·信息可视化·pandas
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月8日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
geovindu2 小时前
python:Coroutines Pattern
开发语言·python·设计模式·协程模式
A.说学逗唱的Coke2 小时前
【运维专题】playbooks保姆级使用指南
运维·开发语言·python