Scrapy框架介绍
在当今数据驱动的世界中,网络爬虫已成为获取和分析海量数据的重要工具。Scrapy是一个开源的、用Python编写的网络爬虫框架。作为一个强大的Python框架,为开发者提供了一个高效、灵活且可扩展的方式来构建和管理网络爬虫,不仅支持从网页中提取数据,还提供了强大的数据处理和存储功能。
Scrapy框架核心组件介绍
Scrapy框架由多个核心组件组成,每个组件都有其特定的职责。理解这些组件及其相互作用是掌握Scrapy的关键。
1. Spiders(爬虫)
Spiders是Scrapy的核心组件之一,负责定义如何从网页中提取数据。每个Spider都是一个Python类,继承自scrapy.Spider。Spider类通常包含以下方法:
- start_requests(): 定义初始请求,通常返回一个或多个Request对象。
- parse(response): 处理响应并提取数据。这个方法通常返回Item对象或生成新的Request对象,编写程序的时候要注意,这里返回的是对象生成器,而不是直接的数据。
2.Items(项目)
Items是Scrapy中用于定义数据结构的容器。它们类似于Python中的字典,但提供了更强的类型检查和字段定义功能。通过定义Items,开发者可以明确指定爬虫需要提取的数据字段。
3.Item Loaders(项目加载器)
Item Loaders是Scrapy中用于简化数据提取和处理的工具。它们允许开发者通过定义输入和输出处理器来处理数据,从而减少代码的复杂性。
4.Pipelines(管道)
Pipelines是Scrapy中用于处理和存储数据的组件。它们通常用于数据清洗、验证和存储。每个Pipeline都是一个Python类,继承自scrapy.ItemPipeline,并实现process_item(item,
spider)方法。
5.Middlewares(中间件)
Middlewares是Scrapy中用于处理请求和响应的插件。它们可以用于处理各种任务,如请求重试、代理管理、用户代理管理等。Scrapy提供了多种内置中间件,开发者也可以自定义中间件。
6.Scheduler(调度器)
Scheduler负责管理请求队列,决定哪些请求应该被处理。它与Downloader协同工作,确保请求按顺序处理。
7.Downloader(下载器)
Downloader负责从互联网上下载网页内容。它与Spiders和Scheduler协同工作,确保请求能够被正确处理并返回响应。
8.Settings
爬虫的配置文件,包括请求头以及下载速度等配置。
Scrapy的工作流程
Scrapy框架自动完成了一般的爬虫程序的请求过程,它的工作流程可以概括为以下几个步骤:
- Spider生成初始请求:Spider通过**start_requests()**方法生成初始请求。
- 请求被调度器管理:生成的请求被传递给Scheduler,Scheduler负责管理请求队列。
- 下载器处理请求:Scheduler将请求传递给Downloader,Downloader负责从互联网上下载网页内容。
- 响应被传递给Spider:Downloader将下载的响应传递回Spider,Spider通过parse()方法处理响应并提取数据。
- 数据被传递给Pipeline:提取的数据被传递给Pipeline,Pipeline负责处理和存储数据。
使用scrapy创建第一个项目
1. 在项目目录打开终端使用命令行创建项目
scrapy startproject 项目名
如:scrapy startpeoject model
2. 进入爬虫文件夹新建爬虫文件
一定要先进入爬虫的文件目录下才能新建爬虫文件
cd .\model
scrapy genspider 爬虫名 域名
如:scrapy genspider model model.com
3. 将整个文件夹pycharm中打开即可
Scrapy使用案例
为了能真正体会到scrapy框架的功能使用,下面给出一个用scrapy框架爬取豆瓣top250数据的完整案例:
创建项目的命令根据上面的步骤即可:
1. scrapy startproject douban_top250
2. cd .\douban_top250
3. scrapy genspider douban_spider movie.douban.com
**4.**在items项目中定义字段
import scrapy
classDoubanTop250Item(scrapy.Item):
link = scrapy.Field()#链接
imgSrc = scrapy.Field()#图片
ctitle = scrapy.Field()#中文名
otitle = scrapy.Field()#英文名
rating = scrapy.Field()#评分
judgeNum = scrapy.Field()#评价数
inq = scrapy.Field()#概况
bd = scrapy.Field()#相关信息
optional=scrapy.Field()#国家
5.在douban_spider文件中编写执行程序
此处收集数据根据css选择器定位,当然可以根据不同网页结构采取不同的定位方式,如Xpath等
import scrapy
classDoubanSpider(scrapy.Spider):
name ="douban_spider"
allowed_domains =["movie.douban.com"]
start_urls =[f"https://movie.douban.com/top250?start={i *25}"for i inrange(10)]defparse(self, response):for item in response.css('div.item'):
data ={}
data['link']= item.css('div.info a::attr(href)').get()#链接标签
data['imgSrc']= item.css('div.pic a img::attr(src)').get()#图片标签
titles = item.css('div.info div.hd span.title::text').getall()#题目标签iflen(titles)==2:
data['ctitle']= titles[0]
data['otitle']= titles[1].replace("/","")else:
data['ctitle']= titles[0]
data['otitle']=''
data['rating']= item.css('div.info div.bd div.star span.rating_num::text').get()#评分# content > div > div.article > ol > li:nth-child(1) > div > div.info > div.bd > div > span:nth-child(4)
data['judgeNum']= item.css('div.info div.bd div.star span:contains("人评价")::text').re_first(r'(\d+)')#评价数# content > div > div.article > ol > li:nth-child(1) > div > div.info > div.bd > div > span.rating_num
data['inq']= item.css('div.info div.bd span.inq::text').get()#概况
bd = item.css('div.info div.bd p::text').getall()#相关信息
bd =''.join(bd).strip()#删除两端空白字符
data['bd']= bd
yield data#生成器对象
6.编写pipelines管道存储文件
本案例采用excel存储数据,当然也可以使用csv文件或者json等文件进行存储
import xlwt
classExcelPipeline:def__init__(self):
self.book = xlwt.Workbook(encoding="utf-8", style_compression=0)
self.sheet = self.book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)
self.col =("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")for i inrange(len(self.col)):
self.sheet.write(0, i, self.col[i])
self.row =1defprocess_item(self, item, spider):for i, value inenumerate(item.values()):
self.sheet.write(self.row, i, value)
self.row +=1return item
defclose_spider(self, spider):
self.book.save('豆瓣电影Top250.xls')
7.配置settings
- 在配置文件中我们需要将ITEM_PIPELINES启用
ITEM_PIPELINES ={'douban_top250.pipelines.ExcelPipeline':300,}
- 为了防止爬虫监测,我们还需要设置USER_AGENT模拟浏览器发送请求
USER_AGENT ="Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Mobile Safari/537.36"
- 当然还需要遵守爬虫规则
ROBOTSTXT_OBEY =True
除此之外,我们还可以设置爬取速度
DOWNLOAD_DELAY =3
8.运行爬虫
scrapy crawl douban_spider
等待完成即可
总结
Scrapy是一个功能强大且灵活的网络爬虫框架,适用于各种数据提取和分析任务。通过理解其核心组件和工作流程,开发者可以轻松构建高效、可扩展的爬虫。无论是初学者还是有经验的开发者,Scrapy都是一个值得深入学习和使用的工具。
ಥ_ಥ谢谢支持(ಥ _ ಥ)
版权归原作者 予安灵 所有, 如有侵权,请联系我们删除。