scrapy用法举例 (Scrapy爬取豆瓣电影Top250)

发布时间 2023-07-14 13:39:38作者: 明媚的夏午

Scrapy是一个Python的爬虫框架,用于快速开发和部署Web爬虫。它提供了一套完整的爬虫工具,包括爬虫的调度、数据下载、数据处理和存储等功能,同时也支持多线程、分布式和异步IO等高级特性。

以下是Scrapy的用法介绍:

  1.安装Scrapy
    Scrapy可以通过pip安装,命令如下:

pip install scrapy  

  

  2.创建Scrapy项目

    使用以下命令创建一个Scrapy项目:

scrapy startproject douban  

    其中 douban 为项目名

  3.创建Spider

    使用以下命令创建一个Spider:

scrapy genspider spider_name domain_name 

    其中,spider_name是Spider名称,domain_name是要爬取的域名。

    例子:

scrapy genspider douban_movie https://movie.douban.com/top250  

    创建好Spider之后,需要在Spider中定义start_urls和parse方法,其中start_urls是要爬取的起始URL,parse方法是用来处理下载的数据。

    在Spider中定义start_urls和parse方法:

import scrapy  
  
class DoubanMovieSpider(scrapy.Spider):  
    name = 'douban_movie'  
    allowed_domains = ['movie.douban.com']  
    start_urls = ['https://movie.douban.com/top250']  
  
    def parse(self, response):  
        for movie in response.xpath('//div[@class="hd"]'):  
            yield {  
                'title': movie.xpath('.//a/span[1]/text()').extract_first(),  
                'rating': movie.xpath('../div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first(),  
                'link': movie.xpath('.//a/@href').extract_first()  
            }  

  4.配置Scrapy

    在settings.py中设置下载延迟和User-Agent:

DOWNLOAD_DELAY = 1  
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'  

  5. 运行Scrapy

    使用以下命令运行Scrapy:

scrapy crawl douban_movie -o douban_movie.csv  

    其中,douban_movie是Spider名称,douban_movie.csv是输出文件名称。

  6.数据处理和存储

    可以使用Scrapy提供的Item和Pipeline来处理和存储数据。在items.py中定义数据项:

import scrapy  
  
class DoubanMovieItem(scrapy.Item):  
    title = scrapy.Field()  
    rating = scrapy.Field()  
    link = scrapy.Field()  

    在pipelines.py中定义Pipeline:

import csv  
  
class DoubanMoviePipeline(object):  
    def __init__(self):  
        self.file = open('douban_movie.csv', 'w', encoding='utf-8', newline='')  
        self.writer = csv.writer(self.file)  
        self.writer.writerow(['title', 'rating', 'link'])  
  
    def process_item(self, item, spider):  
        self.writer.writerow([item['title'], item['rating'], item['link']])  
        return item  
  
    def close_spider(self, spider):  
        self.file.close()  

    在settings.py中启用Pipeline:

ITEM_PIPELINES = {  
    'douban.pipelines.DoubanMoviePipeline': 300,  
}  

    通过以上步骤,就可以使用Scrapy爬取豆瓣电影Top250,并将结果保存到CSV文件中。