爬虫框架 XPath 语法与接口监听用法对比笔记

3 月 11 日
阅读 16 分钟
1.2k
⚠️ 关键区别:Scrapy / feapder 用 /text() 节点提取文本,需要 .get() 或 .getall() 转为 Python 字符串Selenium / DrissionPage 直接用 .text 属性Playwright 用 .inner_text() 方法(异步场景需 await)

Scrapy 源码笔记:为什么 make_request_from_data 需要 for 循环?

2 月 27 日
阅读 4 分钟
1.1k
核心问题make_request_from_data 用的是 return,只返回单个对象,为何 next_requests 里还需要 for req in reqs 循环?

Redis 笔记:为什么从 Redis 取出的数据是字节而不是字符串?

2 月 27 日
阅读 2 分钟
709
核心问题通过 lpush 把 URL 字符串放入 Redis,取出来时却是 bytes,需要手动 .decode('utf-8') 才能变回字符串。Redis 把字符串变成字节了吗?

scrapy-redis 中 RedisSpider 的正确使用方式--第三遍学习scrapy-redis的心得体会

2 月 26 日
阅读 3 分钟
709
核心结论: 继承 RedisSpider 后,不能重写 start_requests(),要重写 make_requests_from_url()。

scrapy-redis 中 dupefilter 缺失问题解析

2 月 26 日
阅读 2 分钟
652
核心结论: 不是没用 Redis Scheduler,而是 dont_filter=True 跳过了去重器,所以 Redis 里不会创建 dupefilter 这个 Key。

Redis 数据结构核心模型笔记

2 月 25 日
阅读 1 分钟
837
Redis 数据结构核心模型笔记一、Redis 本质模型Redis 是 key–value 结构key:必须是字符串value:只能是以下 5 种类型之一 {代码...} 二、一个 key 只能对应一种数据类型Redis 不支持混合数据结构。 {代码...} 例如: {代码...} 不能出现: {代码...} 三、为什么不能混合?Redis 底层实现是: {代码...} list → quicklis...

Scrapy-Redis Scheduler 队列模式详解

2 月 25 日
阅读 3 分钟
950
特点: 基于 Redis ZADD/ZPOPMIN,以 Request 的 priority 字段作为排序依据,priority 越大越先处理。

# Playwright 快速参考手册

2 月 24 日
阅读 19 分钟
1.8k
1. 创建 Playwright 对象方法1:上下文管理器(推荐) {代码...} 方法2:手动管理生命周期 {代码...} 2. 创建浏览器对象 {代码...} 3. 创建 Page 对象 {代码...} 4. 打开网页 {代码...} 5. 获取网页信息获取网页源代码 {代码...} 获取网页 URL {代码...} 获取网页标题 {代码...} 6. 元素定位和交互定位元素 {代码...} 获...

Scrapy meta 参数完全指南

2 月 24 日
阅读 6 分钟
1.2k
核心概念meta 是 Request 对象中的字典,用于在请求间传递数据和配置。它就像一个"信息包裹",跟随请求在整个爬虫流程中流动。常用 meta 键分类🌐 网络请求控制键类型说明示例proxystr指定代理服务器http://proxy.example.com:8080download_timeoutint/float下载超时时间(秒)10dont_redirectbool禁止重定向Truedont_ret...

Scrapy Pipeline:raise DropItem() vs return item 的区别

2 月 23 日
阅读 1 分钟
643
在 Scrapy Pipeline 中,return item 不会丢弃数据,item 会继续传递给后续 Pipeline;只有 raise DropItem() 才能真正终止 item 的传递链路。

Scrapy 各组件 __init__ 触发机制深度解析

2 月 23 日
阅读 3 分钟
953
本文从一段 Scrapy Pipeline 代码出发,系统梳理 Spider、Pipeline、Middleware、Item 四大组件的实例化机制,以及 __init__ 与 from_crawler 的关系。

Scrapy Downloader Middleware 执行机制完全总结

2 月 21 日
阅读 2 分钟
1k
本笔记彻底讲清三个问题:process_request 返回 Response 会发生什么?process_request 返回 Request 会发生什么?在多个中间件情况下执行顺序如何变化?一、Downloader Middleware 正常执行流程假设中间件顺序:MiddlewareAMiddlewareBMiddlewareC正常流程(没有中断)Engine ↓A.process_request ↓B.process_request ↓C...

Scrapy-Redis 分布式爬虫深度解析:去重机制与数据持久化最佳实践

1 月 3 日
阅读 11 分钟
1.1k
目录[TOC]一、核心问题:为什么要用 Redis 管理起始 URL?1.1 传统方式 vs Redis 方式传统 Scrapy 方式pythonclass MySpider(scrapy.Spider):

Scrapy 核心机制深度解析---难度偏高

2025-12-10
阅读 9 分钟
877
下面的例子中绑定的是 parse 回调函数,但在该回调函数中的 self.parse_product 和 self.parse_article 可以分别处理 response:

Selenium WebDriverWait 原理总结

2025-12-07
阅读 3 分钟
1.3k
WebDriverWait.until() 的本质python传入的是函数对象(函数地址),不是函数调用结果wait.until(函数对象) # ✅ 正确:传入函数本身wait.until(函数调用()) # ❌ 错误:传入函数返回值

Dp框架监听接口数据方法总结(含 steps 与 wait 讨论)

2025-11-18
阅读 3 分钟
1.7k
DrissionPage 监听器 API 完全指南一、方法概览方法参数返回类型阻塞/超时适用场景steps(count=XX)count:循环次数或批量数据数量生成器,每次 yield 一条数据对象阻塞直到 count 条数据完成批量同步处理接口数据,已知数据量或固定次数获取wait(timeout=XX)timeout:最大等待时间(秒)单条数据对象,如果超时返回 None...

# Python多进程深度解析:Windows下的进程创建与数据传递机制

2025-11-10
阅读 11 分钟
1.2k
前言在使用 Python 的 multiprocessing 模块时,你是否遇到过这些困惑:为什么子进程能访问 self.url 和 self.headers 这些实例属性?子进程是如何获取类方法、类属性和模块函数的?为什么数据库连接不能放在 __init__ 中?if __name__ == '__main__': 到底保护了什么?本文将深入剖析 Windows 平台下 Python 多进程的底...

🎭 一场魔幻舞台剧,带你看懂JavaScript原型链的前世今生

2025-10-05
阅读 3 分钟
1.3k
以下内容是经过20+小时的构思和理解写成的,如果您觉得有趣和有帮助,请点赞关注并转发,谢谢!用魔幻舞台剧讲解 JS 原型链的前世今生今天用一则魔幻舞台剧来讲解 JS 原型链的前世今生。导演设定导演: JS 引擎(C++ 语言)导演设定的开场人物:普通人:Object魔法师:Function导演设定的开场布景:万物博物馆:Object.p...
封面图

《浏览器、网页与 jQuery:从静态代码到动态交互的完整理解》

2025-09-29
阅读 2 分钟
1.3k
在前端开发中,很多初学者容易混淆 浏览器、网页、JavaScript(JS)、Ajax 和 jQuery 的关系。本文将从基础概念出发,把这些知识串联起来,帮助你建立完整认知。

前后端的世纪大分手:不分离 vs 分离,谁更香?

2025-09-29
阅读 1 分钟
2k
在网站开发中,经常会听到 “前后端不分离” 和 “前后端分离” 这两种架构方式。很多初学者容易混淆:两者的最大区别到底是什么?本文做一个简明总结。

# Python跨语言调用JavaScript完整指南

2025-09-23
阅读 6 分钟
1.5k
技术架构Python端:subprocess模块使用subprocess.run()执行Node.js进程: {代码...} JavaScript端:process.argv参数接收Node.js通过process.argv数组接收命令行参数: {代码...} 参数获取的两种方法方法1:slice(2) - 适合可变参数 {代码...} 方法2:直接索引 - 适合固定参数 {代码...} CompletedProcess返回对象详解s...

深入理解 Axios 拦截器与 Promise 异步机制:从源码角度剖析异步编程的本质

2025-09-22
阅读 8 分钟
1.7k
在前端开发中,我们经常使用 Axios 进行 HTTP 请求,并通过拦截器来统一处理请求和响应。但你是否真正理解拦截器背后的工作原理?为什么拦截器能够按顺序执行?为什么有时候拦截器的 onRejected 不会被触发?

JavaScript原型链深度解析:从'缔造者'视角理解constructor与__proto__

2025-09-15
阅读 9 分钟
1.4k
JavaScript原型链深度理解 - 完整版1. 核心概念理解1.1 普通函数和构造函数在JS中无论是普通函数还是构造函数,他们的共同点都是函数对象。不同点在于:普通函数:执行特定逻辑的函数对象构造函数:一种特殊的函数对象,可以通过 new 关键字来实例化一个新的对象在JS中的内置函数(通常大写字母开头,例如 Function、Num...

JavaScript Promise 详解

2025-09-07
阅读 5 分钟
1.7k
JavaScript Promise 完全指南:从基础到进阶一、Promise 构造函数基础1.1 基本语法结构 {代码...} 1.2 执行器函数(Executor Function)function(resolve, reject) 是匿名函数,也称为执行器函数该函数有两个参数:resolve 和 reject⚡ 关键特性:执行器函数在 new Promise() 时立即同步执行1.3 resolve 和 reject 参数详...

Selenium Cookie 全面解析:一文搞懂获取、添加与删除的易混点

2025-08-25
阅读 6 分钟
1.3k
Selenium Cookie 完全指南:从原理到实战一、Cookie 的本质在 HTTP 协议 / 浏览器里,一条 cookie 就是一个键值对: {代码...} 实际例子 {代码...} name:cookie 的名字(标识符,相当于 key)value:cookie 的值(真正的数据,比如 token、session id)二、Selenium 中的 Cookie 表示在 Selenium 中,browser.get_cooki...

99%的人都误解了 JSON,这才是它的真面目!

2025-08-14
阅读 3 分钟
2k
JSON 格式详解 📝📋 目录JSON 是什么JSON 支持的数据类型序列化与反序列化哪些数据 JSON 搞不定元组为什么会变成列表实用案例最佳实践 & 踩坑提示JSON 是什么JSON 全称 JavaScript Object Notation,是一种轻量级的数据交换格式,特点是:跨语言:不管你用 Python、Java、Go 还是 PHP,都能处理好读好写:纯文本,人眼直接...

aiohttp 的黑匣子打开了!ClientSession 到底做了啥

2025-08-02
阅读 7 分钟
1.2k
session = aiohttp.ClientSession() 这里实例化的 session 到底是个什么对象?如果是普通对象的话,为何它的 .get() 方法的调用需要使用 await?明明源码中是 def get 这个普通函数啊?

张三:从泥水匠到包工头的故事 *—— asyncio.run_in_executor 用法详解*

2025-08-01
阅读 7 分钟
1.9k
run_in_executor()的用法曾经让我困惑了好久。而今天包工头张三的故事,恰好诠释了 run_in_executor() 的核心思想与使用场景。让我们一起来听听,张三是如何从一个亲力亲为的手艺人,蜕变为能调度多线程资源的包工头的。

大白话帮你彻底理解 aiohttp 的 ClientSession 与 ClientResponse 对象

2025-07-31
阅读 3 分钟
2.1k
session = aiohttp.ClientSession() 这里实例化的 session 到底是个什么对象?如果是普通对象的话,为何它的 .get() 方法的调用需要使用 await?明明源码中是 def get 这个普通函数啊?