使用scrapy爬取豆瓣top250并读写到excel
时间: 2025-07-05 11:01:09 浏览: 3
### 使用Scrapy框架爬取豆瓣Top250电影信息并导出至Excel
#### 安装依赖库
为了使用Scrapy框架,需要先安装该框架以及其他必要的工具。可以通过pip命令来完成这些操作:
```bash
pip install scrapy openpyxl pandas
```
这会安装Scrapy用于创建和管理爬虫项目,`openpyxl` 和 `pandas` 则是为了后续将数据保存为Excel文件做准备。
#### 创建Scrapy项目
初始化一个新的Scrapy项目,命名为`douban_movie_top_250`:
```bash
scrapy startproject douban_movie_top_250
cd douban_movie_top_250
```
#### 编写Spider代码
在项目的`spiders`目录下新建一个名为`movie_spider.py`的文件,在其中定义具体的爬虫逻辑。此部分主要涉及解析HTML文档以提取所需的信息,并将其封装成Item对象传递给pipeline进行进一步处理[^3]。
```python
import scrapy
from ..items import DoubanMovieTop250Item
class MovieSpider(scrapy.Spider):
name = "movies"
allowed_domains = ["douban.com"]
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
selector = '//ol[@class="grid_view"]/li'
for item in response.xpath(selector):
movie_item = DoubanMovieTop250Item()
title_selector = './/span[@class="title"][1]/text()'
rating_selector = './/span[@class="rating_num"]/@content'
movie_item['title'] = item.xpath(title_selector).get().strip()
movie_item['rating'] = float(item.xpath(rating_selector).get())
yield movie_item
next_page_url = response.css('div.paginator span.next a::attr(href)').extract_first()
if next_page_url is not None:
yield scrapy.Request(response.urljoin(next_page_url))
```
这段代码实现了对每一页上的所有电影条目的遍历,从中抽取标题(`title`)与评分(`rating`)两个字段的数据,并通过yield语句返回给下一个阶段——即Pipeline。
#### 数据项(Item)定义
编辑位于`items.py`内的类定义,确保其能容纳从网页上抓取下来的数据:
```python
import scrapy
class DoubanMovieTop250Item(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
rating = scrapy.Field()
```
#### 处理数据存储(Pipeline)
最后一步是在`pipelines.py`中实现自定义管道功能,以便把收集到的信息存入Excel文件内。这里利用了Pandas库简化了这一过程:
```python
import pandas as pd
class SaveToExcelPipeline(object):
def __init__(self):
self.items = []
def process_item(self, item, spider):
self.items.append(dict(item))
return item
def close_spider(self, spider):
df = pd.DataFrame(self.items)
df.to_excel('./output/douban_movies.xlsx', index=False)
```
上述代码片段展示了如何捕获传来的每一项记录,并最终一次性全部写出到指定路径下的Excel工作簿里去[^1]。
配置settings.py使得上面编写的Pipeline生效:
```python
ITEM_PIPELINES = {
'your_project_name.pipelines.SaveToExcelPipeline': 300,
}
```
以上就是整个流程的大致介绍,按照这样的方式设置好之后就可以启动爬虫程序了。运行如下命令即可开始采集任务:
```bash
scrapy crawl movies
```
阅读全文
相关推荐
















