• Scrapy 爬虫框架


    5+2  的结构

    Scrapy爬虫框架解析
    Engine模块(不需要用户修改):控制所有模块之间的数据流;根据条件触发事件
    Downloader模块(不需要用户修改):根据请求下载网页
    Scheduler模块(不需要用户修改):对所有爬取请求进行调度管理
    Downloader Middleware中间键
    目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制
    功能:修改、丢弃、新增请求或响应用户可以编写配置代码
    Spider模块(需要用户编写配置代码)
    解析Downloader返回的响应(Response)
    产生爬取项(scraped item)
    产生额外的爬取请求(Request)
    Item Pipelines模块(需要用户编写配置代码)
    以流水线方式处理Spider产生的爬取项
    由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
    可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库 
     
    Spider Middleware中间键
    目的:对请求和爬取项的再处理
    功能:修改、丢弃、新增请求或爬取项
    用户可以编写配置代码
     
    requests库和Scrapy爬虫的比较
    相同点
    两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
    两者可用性都好,文档丰富,入门简单
    两者都没用处理js、提交表单、应对验证码等功能(可扩展)
    不同点
    选用哪个技术路线开发爬虫
     
    Scrapy爬虫的常用命令 
    Scrapy是为持续运行设计的专业爬虫框架,提供操作的Scrapy命令行
    为什么Scrapy采用命令行创建和运行爬虫
    命令行(不是图形界面)更容易自动化,适合脚本控制
    本质上,Scrapy是给程序员用的,功能(而不是界面)更重要 
     一个实例
    演示HTML页面地址:http://python123.io/ws/demo.html
    文件名称:demo.html
    产生步骤
    步骤1:建立一个Scrapy爬虫工程
    scrapy startproject python123demo
    生成的工程目录
     
    步骤2:在工程中产生一个Scrapy爬虫
    cd python123demo ­­> scrapy genspider demo python123.io
    demo.py文件
    # -*- coding: utf-8 -*-
    import scrapy
    
    
    class DemoSpider(scrapy.Spider):必须继承于scrapy.Spider
        name = 'demo'
        allowed_domains = ['python123.io']#只能爬取该域名一下的内容
        start_urls = ['http://python123.io/']
    
        def parse(self, response):
            pass
     
    # parse()用于处理响应,解析内容形成字典,发现新的URL爬取请求 
     
    步骤3:配置产生的spider爬虫 
     
    # -*- coding: utf-8 -*-
    
    
    
    import scrapy
    class DemoSpider(scrapy.Spider):
        name ='demo'
        allowed_domains = ["python123.io"]
        start_urls = ['https://python123.io/ws/demo.html']
        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 demo 
  • 相关阅读:
    Codeforces Round #368 Div. 2
    TXT文件去除多余空行
    #4247. 串
    #4322. 字符串游戏(strgame)
    #4214. 谢特
    #4155. 咱们去烧菜吧
    #4350. 「十二省联考 2019」字符串问题
    #4349. 「十二省联考 2019」异或粽子
    #4303. 跳蚤
    #4302. 魔法咒语
  • 原文地址:https://www.cnblogs.com/tingtin/p/13024870.html
Copyright © 2020-2023  润新知