0 爬蟲概覽

- 爬蟲的分類
    - 通用爬蟲: - 聚焦爬蟲: - 增量式: - 爬取圖片的兩種方式 - 使用requests - urllib模塊request中urlretrieve - 數據解析的基本原理 - 標籤的定位 - 取文本或取屬性 - xpath解析原理 - 實例化etree對象,且將源碼加載到該對象中 - 使用xpath方法結合着xpath表達式進行標籤訂位和數據提取 - 屬性定位[@attrName="value"] - 索引定位:[1] - / // - 取文本: /text() //text() - 取屬性:/@attrName - etree對象實例化的方式 - 本地加載:parse - 網絡加載:HTML - bs4解析原理 - .tagName 單數 - find(屬性定位) 單數 find('tagName',attrName="value") - find_all 複數 - Beautiful對象實例化方式 本地/網絡 soup.div soup() - 面試題:如何爬取攜帶標籤的指定頁面內容 bs4 text()/get_text()/string() 
--------------------------------------------------------------
1 鏈接池報警 請求頭改 Connection: keep-alive 爲close
             User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
2 代理IP 在IP被封禁後 3 每次請求之間sleep進行間隔等待
---------------------------------------------------------------
驗證碼識別:雲打碼平臺  http://www.yundama.com/ 打碼兔 超級鷹
使用流程:
    註冊
    登錄:
      普通用戶:
        查詢剩餘提分(充值)  http://www.yundama.com/price.html
      開發者用戶:
        建立軟件:個人軟件-》添加新軟件(ID,祕鑰)
        下載示例代碼:開發文檔-》點此下載:雲打碼接口DLL-》PythonHTTP示例下載   
--------------------------------------------------------------------
代理:代理服務器
  - 快代理   - 西祠代理   - goubanjia 匿名度:   透明:對方服務器知道你使用了代理ip也知道你的真實ip   匿名:知道你使用了代理ip可是不知道你的真實ip   高匿:什麼都不知道 類型:   http:只能夠發起http請求   https:只能夠發起https的請求
-------------------------------------------------------------
import requests
import asyncio
requests.get
requests.post

1 掌握哪些基於爬蟲的模塊
    urllb
    requests  重點
        - 發起請求的參數
            url
            headers
            data/params
            proxies 代理IP = {'http://':'ip:port'}
        - get請求 post請求 ajax的get ajax的post
        - 獲取響應數據:
            - text
            - content  流
            - json()
            - encoding = 'xxx'
        - requests處理cookie
            - 手動
            - 自動 : session = requests.Session()  雪球網/58二手房
        - 如何提高requests爬取效率
            - 多線程
            - 線程池
        - 單線程+異步協程  aio aiohttp 異步的網絡請求模塊
            - asyncio
            - 事件循環loop   無限循環   遇到阻塞就輪詢下面的
            - 協程對象:  async 修飾的函數的定義,函數調用後會返回一個協程對象  一個特殊函數的返回值  - 任務對象:  就是對協程對象的進一步封裝
            - await 須要手動掛起 async

2 常見的數據解析方法
    - re
    - xpath  用熟練
    - bs4  美麗湯
    - pyquery

 解析步驟:
  標籤訂位
  數據解析
selenuim: 瀏覽器自動化的模塊
做用 :
     便捷的獲取動態加載的數據
     模擬登錄
弊端 : 效率低下

使用流程: 
    實例化瀏覽器對象
    find系列函數  標籤訂位  click()  send_keys()數據交互  page_source(),excute_script(Jscode)
    switch_to.frame('iframe標籤的id值)函數:切換做用域, 若是使用find系列
    動做鏈 : 滑動  觸發一系列的連續動做 ActionChains
   phantomJs : 無視界瀏覽器
   谷歌無頭
   規避被檢測的風險 http://www.javashuo.com/article/p-ofuijkpo-ek.html
- pyppeteer  chromium  asyncio
3 列舉爬蟲中與遇到的比較可貴反爬機制
    robots
    UA 檢測
    驗證碼
    cookie
    代理
    token(請求的動態參數)  古詩文網 post動態參數
    動態數據加載   ***
    圖片懶加載
    數據加密  base64 解密

4 如何抓取動態加載數據
    - ajax 動態請求的
    - js 動態生成的  selenuim

5 移動端數據抓取
    - fiddler
    - 青花瓷
    - mitproxy

 先手機裝證書

6 抓取過哪些類型的數據,量級多少?
    新聞資訊
    財經數據(金融產品 )
    設備參數

7 瞭解哪些爬蟲框架? pyspider(封裝了一個可視化)

8 談談對scrapy的瞭解
項目建立流程
持久化存儲
    基於終端指令
    基於管道
        管道持久化存儲編碼流程
            數據解析
            對item的類進行相關的屬性定義
            將解析到的數據封裝到item類型的對象中
            將item提交給管道
            在管道中進行持久化存儲的操做
            在配置文件中開啓管道
        注意事項
            一個管道類對應一個存儲的載體
            process_item方法中的返回值是item. 這個返回值會給下一個即將被執行的管道類
處理分頁數據爬取:
    手動
        yeild scrapy.Request(url,callback)
post請求:
    yeild scrapy.FormRequest(url,callback,formdata)  #模擬登錄用
cookie處理:
    默認自動處理
日誌等級:
    LOG_LEVEL = 'EEROR'
請求傳參:
    使用場景: 
        當爬取得數據沒有在同一張頁面的時候
        請求傳參傳遞的是item對象
        yeild scrapy.Request(url,callback,meta={'item':item})
            callback : item = response.meta['item']
五大核心組件 -- 
    引擎做用 - 
        處理全部數據流 
        觸發事務
下載中間件 - 
      做用:
            批量攔截scrapy中全部的請求和響應
     中間件類經常使用的方法:
            process_request : 攔截全部正常的請求
            process_response : 攔截全部的響應
            process_exception : 攔截全部的異常請求.
      攔截請求: 
            UA 假裝
            IP 代理設定
      攔截響應:
            修改響應數據,篡改響應對象
 selenium 在scrapy 中的應用:
crawlSpider:  子類 
    用做全站數據爬取的
    連接提取器 LinkExtracter(allow='正則'):
         能夠根據指定的規則(allow='正則') 進行連接的提取
    規則解析器Rule(LinkExtracter,callback,follow=True)
分佈式  
    原生的不能實現的緣由? 管道 調度器 都不能共享
    scrapy-redis實現  
增量式 : 去重  監測
scrapy 框架
- 高效的網絡請求 下載
    - 高性能的持久化存儲 數據解析 中間件
    - twisted 基於異步的模塊

9 如何解析出攜帶標籤的局部頁面數據
    使用bs4
10 scrapy 核心組件
11 中間件的使用
    UA池 IP池  下載中間件

12 如何實現全站數據爬取
    - Spider   手動請求 遞歸調用
    - CrawSpider    連接提取器  規則

13 如何檢測網站數據更新?
    - 增量式

14 分佈式實現原理
    - scrapy-redis 組件

15 如何提高爬取數據的效率 (異步爬蟲)
    - 增長併發
    - 禁止cookie
    - 禁止重試
    - 減小下載超時
    - 下降日誌等級

16 列舉你接觸的反爬機制
17 scrapy如何實現持久化存儲
    - 管道
18 談談對crawlspider的理解,如何使用其進行深度爬取
    - link
    - rule

19 如何實現數據清洗?
    - 清洗空值
        - dropna
        - fillna
    - 清洗重複值
        - drop_duplications(keep)
    - 清洗異常值
        - 指定一個斷定異常值的條件
20 瞭解過機器學習嗎?  
    - sklearn 先階段只停留在應用層面
相關文章
相關標籤/搜索