scrapy爬虫项目实战豆瓣
时间: 2023-09-09 10:10:16 浏览: 175
豆瓣是一个非常流行的社交网站,它包含了电影、图书、音乐等各种文化娱乐信息。本文将介绍如何使用Scrapy爬虫框架,构建一个豆瓣电影爬虫,爬取豆瓣电影排行榜中的电影信息。
1. 创建Scrapy项目
首先,我们需要创建一个Scrapy项目。在命令行中执行以下命令:
```
scrapy startproject douban
```
这将创建一个名为douban的Scrapy项目。项目结构如下:
```
douban/
scrapy.cfg
douban/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
```
其中,scrapy.cfg是Scrapy的配置文件;douban文件夹是我们创建的项目名称,它包含了项目的配置、管道、中间件等设置;spiders文件夹是我们用来编写爬虫代码的地方。
2. 编写爬虫代码
在spiders文件夹中创建一个名为douban_spider.py的文件,编写如下代码:
```python
import scrapy
from douban.items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
item = DoubanItem()
movies = response.css('.grid_view .item')
for movie in movies:
item['rank'] = movie.css('.pic em::text').get()
item['title'] = movie.css('.title a::text').get()
item['rating'] = movie.css('.rating_num::text').get()
item['quote'] = movie.css('.inq::text').get()
yield item
next_page = response.css('.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
```
上述代码中,我们定义了一个名为DoubanSpider的爬虫类,继承自Scrapy的Spider类。我们设置了爬虫的名称、待爬取的域名和起始URL。在parse函数中,我们使用CSS选择器提取电影信息,并使用yield关键字将结果返回。同时,我们还提取了下一页的URL,并使用response.follow方法跟进到下一页。
在douban文件夹中创建一个名为items.py的文件,定义数据项:
```python
import scrapy
class DoubanItem(scrapy.Item):
rank = scrapy.Field()
title = scrapy.Field()
rating = scrapy.Field()
quote = scrapy.Field()
```
3. 配置管道
在douban文件夹中的settings.py文件中,我们需要配置管道,以便将爬取的数据保存到本地文件中。
```python
ITEM_PIPELINES = {
'douban.pipelines.DoubanPipeline': 300,
}
FEED_FORMAT = 'json'
FEED_URI = 'result.json'
```
上述配置将数据保存为JSON格式,保存路径为result.json文件。
在douban文件夹中创建一个名为pipelines.py的文件,定义管道实现:
```python
import json
class DoubanPipeline(object):
def __init__(self):
self.file = open('result.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()
```
上述代码实现了数据的保存功能,将数据保存为JSON格式文件。
4. 运行爬虫
在命令行中,进入douban项目的根目录,执行以下命令即可启动爬虫:
```
scrapy crawl douban
```
爬虫会自动从豆瓣电影排行榜网页中爬取电影信息,并将结果保存到本地文件中。可以通过修改settings.py文件中的FEED_URI配置来改变保存路径。
5. 结果展示
爬虫执行完毕后,我们可以打开result.json文件查看数据结果。例如,下面是rank为1的电影信息:
```json
{"rank": "1", "title": "\u8096\u7533\u514b\u7684\u6551\u8d4e", "rating": "9.7", "quote": "\u4eba\u751f\u82e6\u77ed\uff0c\u4f60\u5fc5\u987b\u559c\u6b22\u5b83\uff0c\u8fd9\u5c31\u662f\u5b83\u7684\u7f8e\u4e3d\u3002"}
```
我们可以看到,爬虫成功地爬取了电影排行榜中的电影信息,并将结果保存到本地文件中。
6. 总结
本文介绍了如何使用Scrapy爬虫框架,构建一个豆瓣电影爬虫,爬取豆瓣电影排行榜中的电影信息。我们首先创建了一个Scrapy项目,然后编写了爬虫代码,使用CSS选择器提取电影信息,并使用管道将结果保存到本地文件中。最后,我们运行了爬虫,并查看了结果。这个例子展示了Scrapy框架的基本使用方法,希望对初学者有所帮助。
阅读全文