当前位置: 首页 > ds >正文

Scrapy爬虫框架Spiders爬虫脚本使用技巧

我们都知道Scrapy是一个用于爬取网站数据、提取结构化数据的Python框架。在Scrapy中,Spiders是用户自定义的类,用于定义如何爬取某个(或某些)网站,包括如何执行爬取(即跟踪链接)以及如何从页面中提取结构化数据(即爬取项)。至于如何定义Spiders爬虫逻辑和规则可以看看我下面总结的经验。

在这里插入图片描述

Scrapy 是一个强大的 Python 爬虫框架,其核心组件 Spiders 用于定义爬取逻辑和数据提取规则。下面是一个详细的结构解析和示例:

一、Scrapy Spider 核心组件

  1. 类定义:继承 scrapy.Spider 或其子类
  2. 必要属性
    • name:爬虫唯一标识符
    • start_urls:初始爬取 URL 列表
  3. 核心方法
    • parse(self, response):默认回调函数,处理响应并提取数据
  4. 可选扩展
    • 自定义设置(custom_settings
    • 链接跟踪规则(CrawlSpider

二、基础 Spider 示例

import scrapyclass BookSpider(scrapy.Spider):name = "book_spider"start_urls = ["http://books.toscrape.com/"]def parse(self, response):# 提取书籍列表页数据for book in response.css("article.product_pod"):yield {"title": book.css("h3 a::attr(title)").get(),"price": book.css("p.price_color::text").get(),"rating": book.css("p.star-rating::attr(class)").get().split()[-1]}# 跟踪下一页next_page = response.css("li.next a::attr(href)").get()if next_page:yield response.follow(next_page, callback=self.parse)

三、进阶 CrawlSpider 示例(自动链接跟踪)

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractorclass AdvancedSpider(CrawlSpider):name = "crawl_spider"allowed_domains = ["example.com"]start_urls = ["http://www.example.com/catalog"]# 定义链接提取规则rules = (# 匹配商品详情页(回调函数处理)Rule(LinkExtractor(restrict_css=".product-item"), callback="parse_item"),# 匹配分页链接(无回调默认跟随)Rule(LinkExtractor(restrict_css=".pagination")))def parse_item(self, response):yield {"product_name": response.css("h1::text").get(),"sku": response.xpath("//div[@class='sku']/text()").get(),"description": response.css(".product-description ::text").getall()}

四、关键功能解析

组件作用
response.css()用 CSS 选择器提取数据(推荐 ::text/::attr(xxx)
response.xpath()XPath 选择器,处理复杂结构
response.follow()自动处理相对 URL 的请求生成
LinkExtractor自动发现并跟踪链接,支持正则/CSS/XPath 过滤
custom_settings覆盖全局配置(如:DOWNLOAD_DELAY, USER_AGENT

五、最佳实践

  1. 数据管道

    • pipelines.py 中定义数据清洗/存储逻辑
    • settings.py 启用管道:ITEM_PIPELINES
  2. 中间件

    • 下载中间件处理请求头/代理/IP轮换

    • 示例代理中间件:

      class ProxyMiddleware:def process_request(self, request, spider):request.meta["proxy"] = "http://proxy_ip:port"
      
  3. 防反爬策略

    • 随机 User-Agent:scrapy-fake-useragent
    • 自动限速:AUTOTHROTTLE_ENABLED = True

六、运行与调试

  1. 启动爬虫

    scrapy crawl book_spider -o books.json
    
  2. Shell 调试

    scrapy shell "http://books.toscrape.com"
    >>> response.css('h1::text').get()
    

七、常见问题解决

  • 403 禁止访问:添加合法 USER_AGENT
  • 数据缺失:检查目标页面动态加载(需启用 scrapy-splashselenium 中间件)
  • 重复 URL:启用去重中间件 DUPEFILTER_CLASS

如果掌握上面这些核心模式后,大体上就可以灵活应对各类网站爬取需求。但是也要建议多结合Scrapy 官方文档多多学习。

http://www.xdnf.cn/news/10879.html

相关文章:

  • 【蓝桥杯】包子凑数
  • 用Python训练自动驾驶神经网络:从零开始驾驭未来之路
  • VR线上展厅特点分析与优势
  • 计算机组成原理知识点汇总(五)计算机运算方法
  • web攻防之SSTI 注入漏洞
  • 黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+)
  • 【数据库】安全性
  • 【笔记】使用Media Creation Tool给新主机装win10魔改iso
  • 00 Deep learning 之回归、拟合、逻辑回归
  • SAP学习笔记 - 开发20 - 前端Fiori开发 Nest View(嵌套视图) ,Fragment(片段)
  • 深入解析 MultipartFile:Spring 框架下的高效文件处理方案
  • backend 服务尝试连接 qdrant 容器,但失败了,返回 502 Bad Gateway 问题排查
  • [Java恶补day14] 56. 合并区间
  • JAVA获取ES连接并查询所有数据
  • RTP over TCP 模式
  • 如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
  • 4-C#的不同窗口传值
  • 洛谷P12610 ——[CCC 2025 Junior] Donut Shop
  • 转战海外 Web3 远程工作指南
  • (10)Fiddler抓包-Fiddler如何设置捕获Firefox浏览器的Https会话
  • 双周报Vol.73:移除使用方法实现 trait 、新增了 “错误多态” 功能、.语法支持使用 _ 的匿名函数...
  • 16QAM在瑞利信道下的性能仿真:从理论到实践的完整解析(附完整代码)
  • 【HarmonyOS 5】鸿蒙Taro跨端框架
  • 【TMS570LC4357】之相关驱动开发学习记录1
  • 总结:线程安全问题的原因和解决方案
  • 初识vue3(vue简介,环境配置,setup语法糖)
  • LlamaIndex的IngestionPipeline添加本地存储(本地文档存储)
  • Unity 环境搭建
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(四)
  • Python中join()方法完全指南:参数要求与常见用法解析