尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

深入PyWebCopy配置系统:ConfigHandler与get_config的10个关键参数详解

深入PyWebCopy配置系统:ConfigHandler与get_config的10个关键参数详解 深入PyWebCopy配置系统ConfigHandler与get_config的10个关键参数详解【免费下载链接】pywebcopyLocally saves webpages to your hard disk with images, css, js links as is.项目地址: https://gitcode.com/gh_mirrors/py/pywebcopyPyWebCopy 是一款免费的 Python 网站复制工具能把包含图片、CSS、JS 和链接的网页完整保存到你的本地硬盘实现离线浏览。它的每一项行为都由配置系统驱动——核心就是get_config工厂函数和ConfigHandler配置容器。搞懂这 10 个关键参数你就掌握了 PyWebCopy 网站的完整控制能力 一、为什么先搞懂 PyWebCopy 配置系统PyWebCopy 的工作流程非常直观读取配置 → 创建抓取器 → 扫描网页 → 下载资源 → 重写链接。其中第一步读取配置就藏在 pywebcopy/configs.py 里。官方两个最常用入口save_webpage存单页和save_website存整站本质上都是这样工作的from pywebcopy import save_website save_website( urlhttps://httpbin.org/, project_folderE://savedpages//, project_namemy_site, bypass_robotsTrue, debugTrue, delayNone, threadedFalse, )你传入的每个参数都会被转交给get_config处理最终生成一个ConfigHandler实例再从中创建 Session网络会话、Context路径上下文和 Crawler爬虫。想理解我传的参数到底影响了什么这篇指南就是最好的入口。二、get_config 的10个关键参数逐个详解get_config的定义位于 pywebcopy/configs.py它的完整签名如下def get_config(project_url, project_folderNone, project_nameNone, bypass_robotsFalse, debugFalse, delayNone, threadedNone):直接暴露的有 7 个参数另外 3 个overwrite、tree_type、http_headers则通过default_config内置提供。下面逐一详解。1️⃣ project_url —— 复制任务的起点必填这是唯一没有默认值的参数也是整个项目的种子。所有后续下载都以它为基准 URL 展开。必须是字符串否则抛出ConfigError见 configs.py L266-L267它会被get_host解析用来自动生成项目名新手提示传首页 URL 会爬整站传具体文章页则主要保存该页及其资源。2️⃣ project_folder —— 文件保存到哪指定下载文件存放的目录路径。关键点不传时默认使用系统临时目录tempfile.gettempdir()见 configs.py L271-L273内部会调用setup_paths做路径规范化转换成绝对路径、统一分隔符并自动创建目录configs.py L151-L1893️⃣ project_name —— 项目文件夹命名用来区分不同抓取项目的目录名。不传时PyWebCopy 会从 URL 自动生成例如http://localhost:5000会生成http_localhost_5000可参考测试用例 test_configs.py L52-L57。最终存储路径是project_folder/project_name。4️⃣ bypass_robots —— 是否遵守 robots.txtFalse默认遵守网站的 robots.txt 爬虫规则True绕过限制抓取被禁止的路径它的实现原理很巧妙在 session.py 的 from_config 中ans.follow_robots_txt not config.get(bypass_robots)——也就是说 Session 会实时检查每个请求是否被允许被禁止的请求直接抛出UrlDisallowed异常。⚠️礼貌抓取建议除非有正当理由否则保持默认值尊重目标网站的爬虫协议。5️⃣ debug —— 打开深度调试日志设为True时setup_config会调用add_stderr_logger向标准错误流输出 DEBUG 级别日志configs.py L213-L218你会看到每一次请求的 URL、被 robots 拦截的记录等细节。排查为什么没抓到某个页面时这是第一件要做的事。6️⃣ delay —— 请求间隔防过载数值表示两次并发请求同一服务器之间的延迟秒数。它直接赋给 Session 的delay属性session.py L219。爬大站时建议设为0.5~2避免给目标服务器造成压力配合多线程使用时delay能有效平滑请求频率7️⃣ threaded —— 多线程加速下载启用后WebPage和Crawler会以线程池方式并行下载资源core.py 的 from_config。⚡注意源码注释明确指出 it can break some site——部分网站对并发敏感可能返回不完整内容。且开启线程后不支持完成后自动打开浏览器会触发警告见init.py L109-L113。8️⃣ overwrite —— 是否覆盖已存在的文件位于default_config中configs.py L88默认False。当本地已存在同名文件时False跳过下载节省流量增量更新利器True重新下载并覆盖二次爬取同一站点时默认行为会自动跳过已保存的资源。9️⃣ tree_type —— 本地目录树结构控制下载文件的目录组织方式取值为HIERARCHY层级结构默认或LINEAR扁平结构定义在 urls.py L391。HIERARCHY镜像原始网站的 URL 路径层级/css/style.css就存到css/style.cssLINEAR所有文件平铺在根目录按内容类型归类想修改它拿到 config 对象后直接赋值config get_config(https://example.com) config[tree_type] LINEAR http_headers —— 自定义 HTTP 请求头默认值来自safe_http_headersconfigs.py L70-L75包含一个伪装成 Firefox 浏览器的User-Agent和Accept-Language。典型用途是携带 Cookie 登录后再抓取session.py L217 中 headers 会直接应用到 Sessionconfig get_config(https://example.com) config[http_headers] { Cookie: sessionabc123, User-Agent: Mozilla/5.0 ... }顺带一提default_config里还有http_cache开启 HTTP 缓存适配器和thread_join_timeout两个进阶开关日常使用可忽略。三、ConfigHandler 的魔法get_xxx 与 set_xxxConfigHandler继承自CaseInsensitiveDict键名不区分大小写但真正的亮点是getattribute方法它动态为每个配置键生成get_键名和set_键名方法。这意味着访问配置有等价三种写法config.get(project_url) # 字典方式 config[project_url] # 下标方式 config.get_project_url() # 属性方法方式动态生成 config.set_delay(1) # 动态 setterConfigHandler还提供了一组配置到对象的工厂方法configs.py L220-L242工厂方法创建的对象典型用途create_context()ContextURL ↔ 本地路径转换create_session()Session带 robots 检查的 HTTP 会话create_page()WebPage保存单个网页create_crawler()Crawler爬取整个网站所有方法都会先校验is_set()——即project_url、project_name、project_folder三项必填齐全否则抛出ConfigError。四、新手快速上手从配置到成品完整的调用链路只有三步以保存单页为例init.py L68-L113from pywebcopy.configs import get_config # 第1步创建配置对象 config get_config(https://httpbin.org/, project_folderE://savedpages//, project_namemy_site, debugTrue) # 第2步由配置创建页面抓取器 page config.create_page() # 第3步执行抓取并保存完成后自动打开浏览器 page.get(config[project_url]) page.save_complete(popTrue)更复杂的场景登录、填表单也能基于同一套配置完成README 中有现成示例可参考README.md 认证章节。五、常见问题 FAQ Q1不写 project_folder 时文件去哪了A系统临时目录Windows 上是C:\Users\你\AppData\Local\Temp。建议始终显式指定避免文件失踪。Q2为什么有些页面没被抓下来A按顺序排查——① 是否被 robots.txt 拦截开debugTrue看日志② 链接是否由 JavaScript 动态生成PyWebCopy 不执行 JS无法发现这类链接③ 目标服务器是否限流。Q3二次抓取会重复下载吗A不会。默认overwriteFalse时已存在的文件会被跳过实现增量更新。Q4如何查看完整的配置项列表A直接查看default_config字典configs.py L78-L99这是所有可用键的总表。写在最后PyWebCopy 的配置系统把存哪、叫什么、怎么爬、爬多快全部收敛到 10 个参数里get_config负责组装ConfigHandler负责分发设计简洁而完整。建议配合 pywebcopy/tests/test_configs.py 中的测试用例对照阅读能帮助你直观看到每个参数的实际效果。祝离线归档愉快【免费下载链接】pywebcopyLocally saves webpages to your hard disk with images, css, js links as is.项目地址: https://gitcode.com/gh_mirrors/py/pywebcopy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表