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()

限定爬虫的爬取范围

相关推荐
阿童木写作2 小时前
跨境电商图片翻译工具推荐:批量图片翻译+视频字幕翻译+智能抠图
python·macos·音视频·xcode
cui_ruicheng3 小时前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
circuitsosk3 小时前
任务规划器的三种范式对比:ReAct、Plan-and-Execute 与 Tree-of-Thought 在真实业务中的取舍
前端·javascript·python·react.js·llm·ai agent
shehuiyuelaiyuehao3 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
宸津-代码粉碎机4 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring
测试19984 小时前
如何用appium搭建Android自动化测试框架?
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
程序员大雄学编程4 小时前
微积分46. 无穷级数四大核心性质:从理论到实践的全方位解析
python·学习·微积分·学习工具
数字化转型分享点滴5 小时前
## 工厂数字化管理系统的价值体现:构建制造全流程数据闭环
python
2301_800074215 小时前
map,list简单方法
windows·python·list
DeepVisionary6 小时前
30B 参数打平 1 万亿参数:Meta 开源 Muse Glimmer,跑分 35 对 36
python·自动化