爬蟲知識梳理

爬蟲知識簡單梳理

1.分類

  • 通用爬蟲(百度、Google等搜索引擎:大而廣)
  • 聚焦爬蟲(特定需求的爬取:爬取篩選需求數據)

2.模擬瀏覽器請求數據(常用)

  • requests模塊API鏈接
    • 核心:response = requests.request()
    • 衍生:
      • requests.get()
      • requests.post()
      • requests.head()
      • requests.put()
      • requests.patch()
      • requests.delete()
    • session
      • ssion = requests.session() #創建含session對象,其他請求不變。
    • 返回內容response
      • response.text
      • response.content # 字節流
      • response.encoding
      • response.aparent_encoding 傳過來的數據的原編碼格式。一般設置爲response.encoding = response.aparent_encoding
      • response.status_code
      • response.cookies.get_dict()
      • response.url
      • response.body
      • response.meta = {'depth':'深度值'} #用於在不同請求間傳遞數據(如上一個parse解析過後,可以通過meta參數,由下個方法的meta對象,進行提取)

3.數據提取

  • 非結構化數據提取
    • 文本、電話號碼、郵箱
      • 正則
    • HTML文件
      • 正則
      • XPath
      • CSS選擇器
  • 結構化數據提取
    • JSON文件
      • json path
      • 轉化成Python類型進行操作(json類)
    • XML文件
      • 轉化成Python類型(xmltodic)
      • XPath
      • CSS選擇器
      • 正則

XML和HTML區別

數據格式 描述 設計目標
XML Extensible Markup Language (可擴展標記語言) 被設計爲傳輸和存儲數據,其焦點是數據的內容。
HTML HyperText Markup Language (超文本標記語言) 顯示數據以及如何更好顯示數據。
HTML DOM Document Object Model for HTML (文檔對象模型) 通過 HTML DOM,可以訪問所有的 HTML 元素,連同它們所包含的文本和屬性。可以對其中的內容進行修改和刪除,同時也可以創建新的元素。

a. 正則(re模塊)

b. Beautiful Soup4模塊API鏈接

lxml 只會局部遍歷,而Beautiful Soup 是基於HTML DOM的,會載入整個文檔,解析整個DOM樹,因此時間和內存開銷都會大很多,所以性能要低於lxml。

BeautifulSoup 用來解析 HTML 比較簡單,API非常人性化,支持CSS選擇器、Python標準庫中的HTML解析器,也支持 lxml 的 XML解析器。

c.XPath、lxml類庫

正則、beautifulsoup、lxml對比
抓取工具 速度 使用難度 安裝難度
正則 最快 困難 無(內置)
BeautifulSoup 最簡單 簡單
lxml 簡單 一般

d. JSON與JsonPATH

API_DOC
json在線解析

  • JSON模塊
    • json.loads()把Json格式字符串解碼轉換成Python對象
    • json.dumps()實現python類型轉化爲json字符串
    • json.load()讀取文件中json形式的字符串元素 轉化爲python類型
    • json.dump()將Python內置類型序列化爲json對象後寫入文件

chardet優秀的編碼識別模塊

  • JsonPath
    • 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現版本,包括:Javascript, Python, PHP 和 Java
    • API_DOC

編碼問題:
decode的作用是將其他編碼的字符串轉換成 Unicode 編碼
encode的作用是將 Unicode 編碼轉換成其他編碼的字符串
一句話:UTF-8是對Unicode字符集進行編碼的一種編碼方式

4.動態HTML處理

那些使用了 Ajax 或 DHTML 技術改變 / 加載內容的頁面,可能有一些採集手段。但是用 Python 解決這個問題只有兩種途徑:
1.直接從 JavaScript 代碼裏採集內容(費時費力)
2.用 Python 的 第三方庫運行 JavaScript,直接採集你在瀏覽器裏看到的頁面(這個可以有)。

方式一(模擬瀏覽器登錄):

a.Selenium 瀏覽器指令模塊

  • Selenium 可以根據我們的指令,讓瀏覽器自動加載頁面(但不包含瀏覽器),獲取需要的數據,甚至頁面截屏,或者判斷網站上某些動作是否發生。
  • api_doc

b.PhantomJS 無界面瀏覽器

  • 是個無界面的瀏覽器軟件,需要下載
  • api_doc
  • 通過selenium來調用PhantomJS實現對應操作。

方式二(構建具體請求信息):

  • 構建具體的http信息,攜帶cookie、請求頭等具體信息,進行發送請求,實現登錄等功能。

5.機器圖像識別

OCR(Optical Character Recognition, OCR)光學文字識別

Tesseract庫(Google開源OCR庫)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章