什么是Scrapy?
Scrapy是一个基于Python的强大的开源网络爬虫框架,用于从网站上抓取信息。它提供了广泛的功能,使得爬取和分析数据变得相对容易。Scrapy的特点包括:
- 强大的数据提取工具,支持XPath和CSS选择器。
- 简化的HTTP请求和响应处理。
- 可配置的下载中间件,用于处理不同类型的请求。
- 数据存储支持,包括JSON、CSV、XML等。
- 并发请求管理,提高效率。
创建Scrapy项目
要使用Scrapy来爬取网站,首先需要创建一个Scrapy项目。下面是创建一个名为douban_top250的Scrapy项目的步骤:
1.打开终端,导航到您想要创建项目的目录,并运行以下命令
scrapy startproject douban_top250
2.进入项目目录:
cd douban_top250
3.创建一个用于爬取电影信息的Spider
scrapy genspider douban_movie douban.com
现在,项目的基本结构已经创建,包括爬虫(Spider)模板文件。
编写Scrapy Spider
Spider是Scrapy项目中负责定义如何抓取信息的部分。需要编辑Spider文件,以指定要爬取的URL、如何处理响应和如何提取数据。
import scrapy
from douban_top250.items import DoubanTop250Itemclass DoubanMovieSpider(scrapy.Spider):name = 'douban_movie' # Spider的名称allowed_domains = ['douban.com'] # 允许爬取的域名start_urls = ['https://movie.douban.com/top250'] # 起始URLdef parse(self, response):for movie in response.css('ol.grid_view li'):item = DoubanTop250Item() # 创建一个DoubanTop250Item对象用于存储数据item['rank'] = movie.css('em::text').get() # 提取电影排名item['title'] = movie.css('.title::text').get() # 提取电影标题item['rating'] = movie.css('.rating_num::text').get() # 提取电影评分item['link'] = movie.css('a::attr(href)').get() # 提取电影链接yield item # 返回Item以供后续处理next_page = response.css('.next a::attr(href)').get() # 提取下一页的链接if next_page is not None:yield response.follow(next_page, self.parse) # 继续爬取下一页
创建Item类
import scrapyclass DoubanTop250Item(scrapy.Item):rank = scrapy.Field()title = scrapy.Field()rating = scrapy.Field()link = scrapy.Field()
配置数据存储
FEEDS = {'douban_top250.json': {'format': 'json','encoding': 'utf-8',},
}
运行Scrapy爬虫
一旦编写好Spider和Item类,并配置好数据存储选项,就可以运行Scrapy爬虫来抓取豆瓣Top 250电影数据了。运行以下命令:
scrapy crawl douban_movie
源码已上传到Github:[github.com/SteamPunkMa…]
转载大佬的文章,仅供学习使用