0


Scrapy框架(高效的网络爬虫)

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框架自动完成了一般的爬虫程序的请求过程,它的工作流程可以概括为以下几个步骤:

  1. Spider生成初始请求:Spider通过**start_requests()**方法生成初始请求。
  2. 请求被调度器管理:生成的请求被传递给Scheduler,Scheduler负责管理请求队列。
  3. 下载器处理请求:Scheduler将请求传递给Downloader,Downloader负责从互联网上下载网页内容。
  4. 响应被传递给Spider:Downloader将下载的响应传递回Spider,Spider通过parse()方法处理响应并提取数据。
  5. 数据被传递给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都是一个值得深入学习和使用的工具。

在这里插入图片描述
ಥ_ಥ谢谢支持(ಥ _ ಥ)

标签: scrapy 爬虫 python

本文转载自: https://blog.csdn.net/FFNCL/article/details/143084097
版权归原作者 予安灵 所有, 如有侵权,请联系我们删除。

“Scrapy框架(高效的网络爬虫)”的评论:

还没有评论