爬蟲知識簡單梳理
文章目錄
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對象,其他請求不變。
- ssion =
- 返回內容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對象,進行提取)
- 核心:response =
3.數據提取
- 非結構化數據提取
- 文本、電話號碼、郵箱
- 正則
- HTML文件
- 正則
- XPath
- CSS選擇器
- 文本、電話號碼、郵箱
- 結構化數據提取
- JSON文件
- json path
- 轉化成Python類型進行操作(json類)
- XML文件
- 轉化成Python類型(xmltodic)
- XPath
- CSS選擇器
- 正則
- JSON文件
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
- 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
無界面瀏覽器
方式二(構建具體請求信息):
- 構建具體的http信息,攜帶cookie、請求頭等具體信息,進行發送請求,實現登錄等功能。
5.機器圖像識別
OCR(Optical Character Recognition, OCR)光學文字識別
Tesseract
庫(Google開源OCR庫)