Spider 实战:编写爬取逻辑、解析 Response、yield 返回数据

📂 所属阶段:第一阶段 — 初出茅庐(框架核心篇)
🔗 相关章节:创建你的首个工程 · Selector 选择器


1. 基础 Spider

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['http://example.com']
    
    def parse(self, response):
        # 提取数据
        for item in response.css('div.item'):
            yield {
                'title': item.css('h2::text').get(),
                'price': item.css('span.price::text').get(),
            }
        
        # 翻页
        next_page = response.css('a.next::attr(href)').get()
        if next_page:
            yield scrapy.Request(
                response.urljoin(next_page),
                callback=self.parse
            )

2. 高级 Spider

class AdvancedSpider(scrapy.Spider):
    name = 'advanced'
    
    def start_requests(self):
        # 自定义起始请求
        for page in range(1, 11):
            url = f'http://example.com/page/{page}'
            yield scrapy.Request(
                url,
                callback=self.parse,
                meta={'page': page}
            )
    
    def parse(self, response):
        page = response.meta['page']
        
        for item in response.css('div.item'):
            yield {
                'page': page,
                'title': item.css('h2::text').get(),
                'url': item.css('a::attr(href)').get(),
            }

3. 小结

Spider 三要素:

1. name:爬虫名称
2. start_urls:起始 URL
3. parse():解析方法

核心技巧:
- yield 返回数据
- yield 返回新请求(翻页)
- response.urljoin() 处理相对 URL

💡 记住:Spider 是 Scrapy 的核心。掌握它,你就掌握了 80% 的爬虫逻辑。


🔗 扩展阅读