Scrapy

2026-07-05发布 1,385 0 0

用官方教程站建立分页 Spider

所在地:
USA
语言:
en
收录时间:
2026-07-05

Scrapy 面向的是持续运行的网页采集项目:请求怎样排队、哪个回调解析响应、字段如何清洗、下一页怎样跟随、结果怎样导出,都有明确位置。官方教程使用 Quotes to Scrape 专用练习站验证项目链路;不要把同样的频率和规则原样搬到真实网站。

startproject 生成的是工程边界

截至 2026-09-16,Scrapy 最新 Release 为 2.19.0,要求 Python 3.10+,项目采用 BSD-3-Clause。通常可用 pip install Scrapy;Windows 官方更推荐 conda-forge,以减少底层依赖编译问题。随后运行 scrapy startproject tutorial,会创建 scrapy.cfg 和 Python 包,包内包含 items.py、middlewares.py、pipelines.py、settings.py、spiders/。

当前教程展示 start() 产生 scrapy.Request;同时说明也可以设置 start_urls,默认的 start 实现会据此创建请求。响应没有显式 callback 时,Scrapy 调用 parse()。这些约定让请求入口与解析逻辑分开,而不是把所有代码写在一个脚本循环里。

先在 shell 里把选择器问清楚

运行 scrapy shell "https://quotes.toscrape.com/page/1/",先检查页面容器:

  • response.css("div.quote") 应返回当前页的多条 quote 容器。
  • quote.css("span.text::text").get() 取得引文。
  • quote.css("small.author::text").get() 取得作者。
  • quote.css("div.tags a.tag::text").getall() 取得标签列表。

::text 与 ::attr(href) 是 parsel 提供的 CSS 伪元素扩展。shell 中结果正确后,再把同一组选择器写进 parse() 并 yield 字典或 Item。这样,字段为空时能先区分“页面没返回”还是“selector 写错”。

分页由响应里的 next 链接驱动

当前页字段产出后,取 li.next a::attr(href),再 yield response.follow(next_page, callback=self.parse)。response.follow 会根据当前响应补全相对地址,不必自己拼域名。真正的检查点是:第二页之后仍持续产出 text、author、tags,同时 URL 去重没有把同一页循环请求。

如果任务需要按标签改变入口,可用 Spider 参数构造 URL,例如 scrapy crawl quotes -a tag=humor,比复制出多个结构相同的 Spider 更易维护。allowed_domains 也应与目标站范围一致,避免分页链接把任务带出站外。

-O 导出与 Item Pipeline 分工不同

scrapy crawl quotes -O quotes.json 使用 Feed exports 写文件,-O 会覆盖目标文件;调试追加数据时要注意重复。JSON/JSON Lines/CSV 等格式由 Feed 设置决定。字段命名和翻页尚未稳定时,用字典直接导出最容易检查;需要统一大小写、去重、验证必填字段或写数据库时,再把处理放进 Item Pipeline。

若需要追加和流式处理,优先用 -o quotes.jsonl;直接向 JSON 数组文件追加可能得到无效 JSON。Feed Export 还支持 XML、本地文件、标准输出及按配置连接 FTP/FTPS、S3、GCS,云存储需要相应 extra;CSV 字段顺序可由 FEED_EXPORT_FIELDS 固定。

动态页面不是给 Spider 加一个等待就能解决

Scrapy 默认处理 HTTP 响应,不执行浏览器 JavaScript。源码里有数据、只是 selector 不对,应继续调解析;关键内容只在浏览器运行后出现,则要接专门下载处理器或把该部分交给浏览器工具。与此同时,ROBOTSTXT_OBEY、下载延迟、并发、User-Agent 和站点条款应在 settings 中明确配置。官方文档:https://docs.scrapy.org/ 。

数据统计

相关导航

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...