每個**都應該提供 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網頁頭資訊的...