Scrapy 实例——爬取豆瓣图书排名top250

本文介绍了如何使用Scrapy框架爬取豆瓣图书排名前250的数据,包括安装Scrapy,创建项目,定义item.py中的数据结构,编写爬虫逻辑以及处理返回数据。在爬虫过程中,遇到403错误,通过修改USER_AGENT解决。最后将爬取结果保存为CSV文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装

pip install E:\python\lxml-4.2.6-cp36-cp36m-win_amd64.whl

pip install E:\python\Twisted-18.9.0-cp36-cp36m-win_amd64.whl

pip install scrapy

2、爬虫实例

首先我们需要创建一个项目。

    scrapy startproject douban_book #

在命令行输入scrapy startproject + [项目名],这样会生成一个scrapy项目。我这个项目的名称是douban_book。大家一看这个名字就知道,我待会要去爬取豆瓣网站图书的内容。

我们来简单看一下该项目的目录结构

我们真正的爬虫程序是写在spiders/bookspider.py文件中的,bookspider.py是我自己创建的文件,其他的文件都是scrapy自己

自动初始化好的。

其中item.py是配置爬虫具体返回的数据,待会我们在具体的例子中会看到如何定义自己需要返回的东西;

pipeline.py是配置具体的通道信息;

settings.py是设置信息,爬虫大部分的配置信息都要在该文件中进行。

首先我们先编写item.py文件,该文件设置爬虫具体的返回数据。

    # -*- coding: utf-8 -*-
     
    # Define here the models for your scraped items
    #

### 使用 Scrapy 框架爬取豆瓣读书 Top 250 数据 #### 创建 Scrapy 项目 为了启动一个新的 Scrapy 项目,命令如下所示: ```bash scrapy startproject douban_book_top250 cd douban_book_top250 ``` 这会初始化一个名为 `douban_book_top250` 的新目录结构来容纳项目的文件[^1]。 #### 定义 Item 类 定义数据项类用于保存抓取到的信息。编辑 `items.py` 文件并加入以下代码片段: ```python import scrapy class BookItem(scrapy.Item): title = scrapy.Field() # 豆瓣书籍名称 author = scrapy.Field() # 作者名 rating = scrapy.Field() # 平均评分 review_count = scrapy.Field() # 参与评价人数 description = scrapy.Field() # 简介描述 ``` 此部分基于先前对于电影条目的定义进行了扩展以适应图书的具体属性[^2]。 #### 编写 Spider 抓取逻辑 创建蜘蛛脚本去遍历目标网页获取所需资料。通过执行下面这条指令可以生成基础模板: ```bash scrapy genspider book_spider "books.douban.com" ``` 随后修改生成的 Python 文件中的解析函数 `_parse()` 来适配实际页面布局以及提取规则。例如: ```python def parse(self, response): books = response.css('.item-root') for book in books: item = BookItem() item['title'] = book.xpath('./div[@class="pl2"]/a/text()').get().strip() item['author'] = book.css('.pub::text').get().strip() item['rating'] = book.css('.rating_nums::text').get() item['review_count'] = book.css('.pl::text').re_first(r'\d+') yield item next_page_url = response.css('#subject_list .paginator span.next a::attr(href)').get() if next_page_url is not None: yield scrapy.Request(response.urljoin(next_page_url)) ``` 这段代码实现了对单页内所有书籍信息的收集,并尝试定位下一页链接继续迭代直到完成整个列表扫描。 #### 配置 Pipeline 处理流程 最后一步是在 `pipelines.py` 中配置好处理管道以便于将采集来的数据持久化存储起来。这里给出 JSON 文件输出的例子作为示范: ```python import json class JsonWriterPipeline(object): def __init__(self): self.file = open('books.json', 'w', encoding='utf-8') def process_item(self, item, spider): line = json.dumps(dict(item), ensure_ascii=False) + "\n" self.file.write(line) return item def close_spider(self, spider): self.file.close() ``` 同时记得激活该插件,在 settings.py 添加或更新 ITEM_PIPELINES 设置项指向自定义处理器路径[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值