scrapy之初见

scrapy之初见

 scrapy号称是当今最为强大的爬虫框架,是所有有兴趣接触爬虫学习同学绕不开的强大神器


5 + 2模块

 scrapy爬虫组成一共有7个部分

Engine:不需要用户修改
  • 控制所有模块之间的数据流
  • 根据条件触发时间
Downloader:不需要用户修改
  • 根据用户请求下载网页
Scheduler:不需要用户修改
  • 对所有爬取请求进行调度管理
Downloader Middleware:用户可以编写配置代码
  • 实施Engine, scheduler, Downloader之间进行用户的可配置的控制
  • 修改,丢弃,新增请求或响应
Spider:需要用户编写
  • 解析Downloader返回的响应(Response)
  • 产生爬取项(scraped item)
  • 产生额外的爬取请求(Request)
Item Pipelines:需要用户编写
  • 以流水线的方式处理Spider产生的爬取项
  • 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
  • 可能操作包括:清理,检验和查重爬取项中的HTML数据,将数据存储到数据库
Spider Middleware:用户可以编写配置代码
  • 对请求和爬取项的再处理
  • 修改,丢弃,新增请求或爬取项

Scrapy常用命令

startproject:创建一个新工程 scrapy startproject< name >[dir]
genspider:创建一个爬虫 scrapy genspider [options]< name >< domai n>
settings:获取爬虫配置信息 scrapy setting[options]
crawl:运行一个爬虫 scrapy crawl< spider >
list:列出工程中所有爬虫 scrapy list
shell:启动URL调试命令行 scrapy shell[url]

步骤

1. 步骤一:建立一个Scrapy爬虫工程

  进入你想建立工程的文件目录,输入command:scrapy startproject projectname
 出现了from cryptography.hazmat.bindings._openssl import ffi, libImportError: DLL load failed: 操作系统无法运行 %1。问题,赶紧conda install openssl试试
 问题照旧,再试下conda install -c conda-forge scrapy看看
 问题依旧,怒删libeay.dll问题解决

生成的工程目录

projectname/ ->外层目录
 scrapy.cfg ->部署Scrapy爬虫的配置文件(用于放在服务器上,在部署在服务器上的爬虫要改动,当前水平不用)
 projectname/ ->Scrapy框架的用户自定义Python代码
- __init__.py -> 初始化脚本,不用修改
- Items.py ->Items代码模板(继承类),通常不用用户编写
- middlewares.py -> Middlewares代码模板(继承类),需要扩展middlewres的功能时需要修改
- pipelines.py -> Pipelines代码模板(继承类)
- settings.py -> Scrapy爬虫的配置文件,优化功能时要改
- spiders/ -> 工程中建立的爬虫,Spiders代码模板目录(继承类)
- __init__.py ->初始文件,无需修改
- __pycache__/ ->缓存目录,无需修改

步骤二:在工程中产生一个scrapy爬虫

 scrapy genspider spidername spiderurl
 此条命令后就会生成一个文件spidername.py

# -*- coding: utf-8 -*-
import scrapy


class Demo1Spider(scrapy.Spider):#必须继承于scrapy.Spider的子类
    name = 'demo1'
    allowed_domains = ['python123.io']#只能爬取这个域名以下的网页
    start_urls = ['http://python123.io/']#以列表形式存爬取的初始页面

    def parse(self, response):#用于处理响应,解析内容形成字典,发现新的url
        pass
步骤3:配置产生的spider爬虫

 就是改spidername.py文件

# -*- coding: utf-8 -*-
import scrapy


class Demo2Spider(scrapy.Spider):
    '''
    name = 'demo2'
    #allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']
    '''
    def start_requests(self):
        urls = ['http://python23.io/ws/demo.html']
        for url in urls:
            yield scrapy.Requests(url = url, callback = self.parser)
    def parse(self, response):
        fname = response.url.split('/')[-1]
        with open(fname, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s.' % fname)
步骤4:运行爬虫,获取网页

  scrapy crawl spidername

yield关键字

yield – 生成器
生成器是一个不断产生值的函数
包含yield语句的函数是一个生成器
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

def gen(n):
    for i in range(n):
        yield i**2
for i in gen(5):
    print(i, " ", end = "")

Scrapy爬虫的数据类型

Requests类
Response类
Item类

Requests类
  • 表示一个http请求
  • 由Spider生成,由Downloader执行
属性或方法
  1. .url Requests对应的请求url地址
  2. .method对应的请求的方法,’get’,’post’等
  3. .headers字典类型风格的请求头
  4. .body请求内容主题,字符串类型
  5. .meta用户添加的扩展信息,在Scrapy内部模块传递信息使用
  6. .copy()复制该请求
Response类
  • 表示一个http响应
  • 由Downloader生成,由spider执行
属性或方法
  1. .url Response对应的请求url地址
  2. .statusHTTP状态码
  3. .headers对应的头部信息
  4. .body对应的内容信息,字符串类型
  5. .flags一组标记
  6. .request产生Response类型对应的Request对象
  7. .copy()复制该响应
Items类
  • 表示一个从HTML页面中提取的信息内容
  • 由Spider生成,由pipline处理
  • Item类似字典类型,可以按照字典类型操作
属性或方法
  1. Beautiful Soup
  2. CSSselector
CSS Selector

< html >.css(‘a(标签名称)::attr(href)(属性标签)’).extract()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值