美文网首页
scrapy学习记录

scrapy学习记录

作者: 奇楠之后 | 来源:发表于2020-05-03 14:18 被阅读0次

scrapy源码

scrapy架构

  • Engine 引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心
  • Item 项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该Item 对象
  • Scheduler 调度器,接受引擎发过来的请求,并将其列中在引擎再次请求的时候将请求提供给引擎
  • Downloader 下载器,下载网页内容,并将网页内容返回给spider
  • Spiders 爬虫,其内定义了爬取的逻辑和网页解析规则,它主要负责解析响应并生成提取结果和新的请求
  • Item Pipeline 项目管道,负责处理由spider从网页中抽取的项目,它的主要任务是清洗、验证和存储数据
  • Downloader Middlewares 下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应
  • Spide Middlewares 爬虫中间件,位于引擎和爬虫之间的钩子框架,主要处理爬虫输入的响应和输出的结果及新的请求

命令

  1. 创建项目
    scrapy startproject 项目名称
  2. 创建一个spider
    scrapy genspider 爬虫名称 项目域名
    在创建一个spider时,后面跟的是参数 域名,不要多写其它
  3. 启动爬虫

scrapy.spiders.Spider 类的基础属性和方法

属性
  • name:爬虫名称,
  • allowed_domain:允许爬取的域名,是可选配置,不在此域名下的链接,不会被跟进爬取
  • start_urls:起始url列表,当spider开始时,如果没有实现start_requests()方法,默认会从该列表开始抓取
  • crawler:它是由 from_crawler()方法设置的,代表的是本 pider 类对应的 crawler 对象Crawler对象包含了很多项目组件,利用它我们可以获取项目的一些配置信息,如最常见的获取项目的设置信息,即 Setting
  • custom_settings:是一个字典,专属于本 spider 的配置。它会覆盖项目全局的设置。此设置必须在初始化前被更新,必须定义成类变量
  • settings:可以通过该属性获取setting文件中的全局变量
方法
  • start_requests:该方法用于生成初始请求,返回一个可迭代对象。该方法默认使用start_urls列表中的url构造request,默认request是get请求方式,如果我们想在启动时以 POST 方式访问某个站点,可以直接重写这个方法,发送 POST 请求时使用 FormRequest
    即可
  • parse:当 没有指定回调函数时,该方法会默认被调用。对response进行处理,解析出新的url或数据。
  • closed:当spider关闭时,该方法会被调用。在这里一般会定义释放资源的一些操作或其他收尾操作。

Downloader Middleware

通常在下载中间件进行,修改UserAgent,设置Proxy,处理重定向,失败重试,设置Cookies等操作。

  1. process_request(request,spider)
    Request Scrapy 引擎调度给 Downloader 之前, process_request ()方法就会被调用,也就是在Request 从队列里调度出来到 Down loader 下载执行之前,我们都可以用 process_request ()方法对Request 进行处。方法的返回值必须为 None、Response对象、request对象之一 ,或者抛出 IgnoreRequest 。

    • 当返回None时,
  2. process_response(request,response,spider)

  3. process_exception(request,exception,spider)

常用示例代码

  • selector的独立使用
from scrapy import Selector

body = '<html>......</html>'
selector = Selector(text=body)
title = selector.xpath('//title/text()').extract_first()
  • pipeline存储mongo
import pymongo
class MongoPipeline(object):
    def __init__(self,mongo_url,mongo_db):
        self.mongo_url = mongo_url
        self.mongo_db = mongo_db
    # 从settings获取变量
    @classmethod
    def from_crawler(cls,crawler):
        return cls(
        crawler.settings.get('MONGO_URL'),
        crawler.settings.get('MONGO_DB')
        )
    def open_spider(self,spider):
        self.client = pymongo.MongoClient(self.mongo_url)
        self.db = self.client[self.mongo_db]

    def process_item(self,item,spider):
        name = item.class.name
        self.db[name].insert(dict(item))
        return item

    def close_spider(self,spider):
        self.client.close() 
  • 修改user-agent
    有两种方法可以修改请求时的user-agent。
    一是修改settings中的USER-AGENT变量
    二是通过downloader middleware的process-request方法修改

参考书籍:
《python3网络爬虫开发实战》【崔庆才】·1

相关文章

  • scrapy学习记录

    scrapy源码 scrapy架构 Engine 引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心 It...

  • Mac 安装Scrapy

    刚学习完Python,准备使用Scrapy练习爬虫。记录一下,在Mac环境下安装Scrapy的步骤及初始工程。 打...

  • Scrapy学习记录2

    标签: 信息检索 1. 创建一个Scrapy项目 2. 定义提取的Item 3. 编写爬取网站的 spider 并...

  • Scrapy爬虫学习记录

    昨天休息的时候偶然发现了一个的球鞋网站,上面有很多关于球鞋的资讯。于是,决定现学现卖,学习scrapy把数据都给爬...

  • scrapy->pywin32

    scrapy遇见三个问题:(仅供自己学习记录) 1:no module named win32API https:...

  • scrapy

    scrapy学习 一、scrapy框架介绍 Scrapy Engine(引擎): 负责Spider、ItemPip...

  • Scrapy 爬虫框架学习记录

    打算做一个小小的项目,用于下载论文,所以先学学爬虫的一些相关知识。 创建项目 安装完 scrapy 后,新建一个爬...

  • scrapy小记

    scrapy入门学习地图 scrapy 框架:http://doc.scrapy.org/en/latest/to...

  • scrapy的概念和流程 (黑马教育)

    scrapy的概念和流程 学习目标: 了解 scrapy的概念 了解 scrapy框架的作用 掌握 scrapy框...

  • 28.scrapy的入门使用

    scrapy的入门使用 学习目标: 掌握 scrapy的安装 应用 创建scrapy的项目 应用 创建scrapy...

网友评论

      本文标题:scrapy学习记录

      本文链接:https://www.haomeiwen.com/subject/twarghtx.html