scrapy介绍,并创建第一个项目

一、scrapy简介

  1. scrapy的概念
    Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。
  1. 工作流程
  • 传统的爬虫流程

  • scrapy的流程

  • 描述
  1. 爬虫中起始的url构造成request对象-->爬虫中间件-->引擎-->调度器
  2. 调度器把request-->引擎-->下载中间件--->下载器
  3. 下载器发送请求,获取response响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
  4. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器,重复步骤2
  5. 爬虫提取数据--->引擎--->管道处理和保存数据

二、关于中间件

  1. 爬虫中间件(Spider Middleware)

作用: 爬虫中间件主要负责处理从引擎发送到爬虫的请求和从爬虫返回到引擎的响应。这些中间件在请求发送给爬虫之前或响应返回给引擎之前可以对它们进行处理。

  • 功能:
  1. 修改请求或响应。
  2. 在请求被发送到爬虫之前进行预处理。
  3. 在响应返回给引擎之前进行后处理。
  4. 过滤或修改爬虫产生的请求和响应。
  • 常见的爬虫中间件:
  • HttpErrorMiddleware: 处理 HTTP 错误。
  • OffsiteMiddleware: 过滤掉不在指定域名内的请求。
  • RefererMiddleware: 添加请求的 Referer 头。
  • UserAgentMiddleware: 添加请求的
  • User-Agent 头。
  • DepthMiddleware: 限制爬取深度。
  1. 下载中间件(Downloader Middleware)
  • 作用: 下载中间件主要负责处理引擎发送到下载器的请求和从下载器返回到引擎的响应。这些中间件在请求发送给下载器之前或响应返回给引擎之前可以对它们进行处理。

  • 功能:

  1. 修改请求或响应。
  2. 在请求被发送到下载器之前进行预处理。
  3. 在响应返回给引擎之前进行后处理。
  4. 对请求进行代理、设置代理认证等。
  • 常见的下载中间件:
  • HttpProxyMiddleware: 处理 HTTP 代理。
  • UserAgentMiddleware: 添加请求的 User-Agent头。
  • RetryMiddleware: 处理请求重试。
  • HttpCompressionMiddleware: 处理 HTTP 压缩。
  • CookiesMiddleware: 管理请求的 Cookies。

三、scrapy的三个内置对象

  1. scrapy.Item:
  • 作用: scrapy.Item 是一个简单的容器对象,用于封装存储爬取到的数据。每个 scrapy.Item 对象都代表了网站上的一个特定数据项。

  • 使用: 在 Scrapy 爬虫中,你可以定义一个继承自 scrapy.Item 的类,定义这个类的属性来表示要提取的字段。这样,当你从页面中提取数据时,可以将提取到的数据存储在 scrapy.Item 对象中

  • 示例:

python 复制代码
import scrapy

class MyItem(scrapy.Item):
    title = scrapy.Field()
    url = scrapy.Field()
  1. scrapy.Request:
  • 作用: scrapy.Request 对象用于指示 Scrapy 下载某个URL,并在下载完成后返回一个 scrapy.Response 对象

  • 使用: 在爬虫中,你可以创建 scrapy.Request 对象,指定要访问的URL、回调函数、请求方法、请求头等信息,然后通过调用这个对象,将请求添加到爬虫的调度队列中

  • 示例:

python 复制代码
import scrapy
class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        urls = ['http://example.com/page1', 'http://example.com/page2']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 处理响应的逻辑
        pass
  1. scrapy.Response:
  • 作用: scrapy.Response 对象表示从服务器接收到的响应,它包含了网页的内容以及一些有关响应的元数据。

  • 使用: 在爬虫的回调函数中,你将接收到的响应作为参数,通过对 scrapy.Response 对象的操作,提取数据或者进一步跟踪其他URL

  • 示例:

python 复制代码
import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'

    def start_requests(self):
        urls = ['http://example.com/page1']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 使用 response.xpath 或 response.css 提取数据
        title = response.xpath('//h1/text()').get()

这三个内置对象是构建 Scrapy 爬虫时非常重要的组件。scrapy.Item 用于封装爬取到的数据,scrapy.Request 用于定义要爬取的URL和请求参数,scrapy.Response 用于处理从服务器返回的响应。通过巧妙地使用这些对象,你可以有效地构建和组织你的爬虫逻辑。

四、scrapy的入门使用

  1. 安装
bash 复制代码
pip/pip3 install scrapy
  1. scrapy项目开发流程
  • 创建项目:
        scrapy startproject mySpider
  • 创建一个爬虫:
    1.进入刚才的项目路径
    2.执行生成命令:scrapy genspider <爬虫名字> <允许爬取的域名>
    例如:scrapy genspider baidui baidu.com
    3.执行后就会在myspider/spider下,生成一个baidu.py,这就是我们的爬虫文件
  • 提取数据:
        根据网站结构在spider中(即baidu.py文件)实现数据采集相关内容
  • 保存数据:
        使用pipeline进行数据后续处理和保存
  1. 定义一个管道类
  2. 重写管道类的process_item方法
  3. process_item方法处理完item之后必须返回给引擎
  4. 在setting文件中启用管道

管道文件

bash 复制代码
import json

class ItcastPipeline():
    # 爬虫文件中提取数据的方法每yield一次item,就会运行一次
    # 该方法为固定名称函数
    def process_item(self, item, spider):
        print(item)
        return item

配置文件

bash 复制代码
#值越小越先运行
ITEM_PIPELINES = {
    'myspider.pipelines.ItcastPipeline': 400
}
  1. 运行爬虫项目
bash 复制代码
scrapy crawl baidu
相关推荐
Bigcrab__1 天前
Python3网络爬虫开发实战(15)Scrapy 框架的使用(第一版)
爬虫·python·scrapy
Bigcrab__2 天前
Python3网络爬虫开发实战(16)分布式爬虫(第一版)
爬虫·scrapy
B站计算机毕业设计超人9 天前
计算机毕业设计PySpark+Django深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
爬虫·深度学习·scrapy·django·课程设计·数据可视化·推荐算法
B站计算机毕业设计超人10 天前
计算机毕业设计Python电影评论情感分析 电影可视化 豆瓣电影爬虫 电影推荐系统 电影数据分析 电影大数据 大数据毕业设计 机器学习 深度学习 知识图谱
大数据·爬虫·python·深度学习·scrapy·机器学习·数据可视化
晓时谷雨13 天前
python scrapy爬虫框架 抓取BOSS直聘平台 数据可视化统计分析
爬虫·python·scrapy·pandas·数据可视化
天启代理ip16 天前
Scrapy添加代理IP池:自动化爬虫的秘密武器
tcp/ip·scrapy·自动化
金灰21 天前
scrapy--子类CrawlSpider&中间件
开发语言·网络·python·scrapy·安全·中间件
天涯幺妹21 天前
Python网络爬虫模拟登录与验证解析
爬虫·python·scrapy·网络安全·pycharm·beautifulsoup·pygame
github_czy22 天前
scrapy学习笔记0828-上
笔记·学习·scrapy