用 Python 編寫網路爬蟲 筆記

2021-07-26 19:36:38 字數 2339 閱讀 8427

每個**都應該提供 api,然而這是不可能的

即使提供了 api,往往也會限速,不如自己找介面

robots.txt 中可能會有陷阱

sitemap 中可能提供了重要的鏈結

乙個簡便方法是使用 site:example.com 查詢,然而這種方法對於大戰不適用

builtwith 模組

pip install builtwith

builtwith.parse(url) # returns a dict

python-whois 模組

pip install python-whois

import whois

whois.whois(url)

錯誤重試,僅當返回的錯誤為500的時候重試,一般400錯誤可認為不可恢復的網頁

偽裝 ua

策略 a. 爬取站點地圖 sitemap b. 通過 id 遍歷爬取

i. id 可能不是連續的,比如某條記錄被刪除了

ii. id 訪問失效 n 次以後可以認為遍歷完全了

相對連線轉化,這點可以利用 lxml 的 make_link_absolute 函式

處理 robots.txt 可以利用標準庫的 robotsparser 模組

import robotsparser

rp = robotparser.robotfileparser

rp.set_url('path_to_robots.txt')

rp.read()

rp.can_fetch("ua", "url")

true or false

支援**

避免爬蟲陷阱,尤其是最後一頁自身引用自身的例子 a. 記錄鏈結深度

例子:正則不適用於匹配網頁結構,因為網頁結構中空白等都是無關緊要的,而可能破壞正則 structural-based

適用於資料本身符合某種模式,比如 ip 位址,比如日期等 content-based

xpath 與 css

適用於匹配網頁的結構資訊 strctual-based,lxml 的 css 選擇器在內部是轉換為 xpath 實現的,css 遠不如 xpath 靈活

beautifulsoup, 慢,從來沒有在生產**中見到過

書中的快取把所有相應都做了快取,包括500的錯誤響應,實際上這樣的直接不快取好了。。

書中的磁碟快取把 url normalize 邏輯也加到了這裡,感覺比較混亂

注意使用磁碟檔案快取的話會受限於磁碟單目錄檔案的數量,即使是 ext4 檔案系統也不大

def process_queue(q):

pass

threads =

while thread or crawl_queue:

for thread in threads:

if not threads.is_alive(): threads.remove(thread)

while len(threads) < max_threads and crawl_queue:

thread = threading.thread(target=process_queue, daemon=true)

thread.start()

time.sleep(some_time)

效能的增長與執行緒和程序的數量並不是成線性比例的,而是對數比例,因為切換要花費一定的時間,再者最終是受限於頻寬的

依賴於 ajax 的**看起來更複雜,但是實際上因為資料和表現層的分離會更簡單,但是如果逆向工程也不好得到通用的方法,如何構建乙個輔助工具呢?

表示出網頁上哪些地方是動態載入的,列出 js 全域性變數,列出可能的 jsonp 請求

利用 ajax 介面時,可以利用各種邊界情況,比如把搜尋條件置為空,置為 *,置為 .

使用qt

使用 selenium 或者 phantomjs,這時附加 cookie 等都是很嚴重的問題

登入表單中往往會有隱藏的引數,比如 form_key 用於避免表單重複提交,還可能需要 cookie 驗證

wow,竟然可以直接從瀏覽器載入 cookie,使用 browsercookie 模組

使用機器識別驗證碼

使用 pillow 和 pytesseract 識別驗證碼,但是 tessact 本不是用來識別驗證碼的

一種銳化方法

img.convert('l')

img.point(lambda x: 0 if x < 1 else 255, 'l')

tessact.image_to_string(img)

還可以通過限定字符集提高識別率

還可以使用人工打碼平台

Python編寫網路爬蟲帶model

分析 的 結構 如 需要採集的 取,建設使用谷歌瀏覽器 如圖 解釋 1.為 欄,分析 的相同部分及不同部分 2.為按f12檢視原始碼,為需要採集的 from reptiletest import qu url for i in range 1,423 if i 1 url m vod index.h...

網路爬蟲 python學習筆記

pip install requestsr requests.get url r requests.get url,params none,kwargs request其實只有乙個方法 request 有兩個物件 import request r requests.get print r.statu...

python網路爬蟲學習筆記

爬取網頁的通用 框架 網路爬蟲的盜亦有道 requests爬取例項 自動爬取html頁面 自動網路請求提交 主要方法 說明requests.request 構造乙個請求 requests.get 獲取html網頁的主要方法,對應於http的get requests.head 獲取html網頁頭資訊的...