python自動化開發-[第二十五天]-scrapy進階與flask使用


今日內容概要

  1、cookie操作

  2、pipeline

  3、中間件

  4、擴展

  5、自定義命令

  6、scrapy-redis

  7、flask使用

    - 路由系統

            - 視圖

            - 模版

            - message(閃現)

    - 中間件

    - session

    - 藍圖

            - 安裝第三方插件

Scrapy
  - 創建project
  - 創建爬蟲
  - 編寫
    -- start_urls = ['http://www.xxx.com']
      - def parse(self,response):
        
        yield Item對象
        yield Request對象
        
      - pipeline
        - process_item
          @classmethod
        - from_clawer
        - open_spider
        - close_spider
        配置
        
      - request對象("地址",回調函數)
  - 執行

高性能相關:
  - 多線程【IO】和多進程【計算】
  - 盡可能利用線程:
    一個線程(Gevent),基於協程:
      - 協程,greenlet
      - 遇到IO就切換
    一個線程(Twisted,Tornado),基於事件循環:
      - IO多路復用
      - Socket,setBlocking(Flase)
上節回顧

一、scrapy補充

  start_requests 

    支持返回值有兩種(scrapy內部通過會執行iter()):

      一、生成器yield Request

                  二、可迭代對象  [url1,url2,url3]

    通過源碼查看源碼入口:

      from scrapy.crawler import Crawler

      Crawler.crawl 方法

      

      例子:

def start_requests(self):
    for url in self.start_urls:
    yield Request(url=url,callback=self.parse)
    # return [Request(url=url,callback=self.parse),]

   ***迭代器和可迭代對象的區別:  

迭代器,具有__next__方法,並逐一向后取值
li = [11,22,33] #迭代器有iter和next方法
obj = iter(li)
obj.__next__()

可迭代對象,具有__iter__方法,返回迭代器
li = list([11,22,33]) //可迭代對象沒有next方法
迭代器 = li.__iter__()

生成器,函數中具有yield關鍵字
__iter__
__next__

迭代器 = iter(obj)

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM