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文件中。
浙公网安备 33010602011771号