500lines之crawler學習(三)

2021-09-10 08:53:03 字數 2140 閱讀 5937

回到最初的話題,為什麼我們通過:

python -q crawl.py xkcd.com

上面命令在控制台執行,啥結果都沒有,是因為在第一篇部落格(crawler學習(一))中,分析過-q會讓日誌級別變低(level=0),設定**(crawl.py中)如下:

levels = [logging.error, logging.warn, logging.info, logging.debug]

logging.basicconfig(level=levels[min(args.level, len(levels)-1)])

所以我們要檢視日誌資訊,就不要加-q命令(或者加-v)提高日誌顯示級別。我們再執行:

python crawl.py xkcd.com

結果如下:

控制台總算出現了兩條日誌資訊,然後就卡住了,什麼結果也沒有。這顯然不是我們想要的結果。但是我們通過日誌,還是能得出重要的資訊,那就是列印第二行的日誌以後,我們的程式在某個地方卡住了。所以先找到第二條日誌列印的地方:

(圖一)

在crawling.py中,我們找到第二條列印日誌的地方,通過每行列印的方式,再結合(crawler學習(一))中urljoin函式的用法,我們初步判斷應該是urljoin函式的地方出了錯。

但是什麼錯,為什麼沒在控制台顯示出來呢?還是在crawling.py中:

可以看出,**採用的是try...finally結構,沒有捕獲異常,更不要說丟擲來了。所以我們需要加點**:

執行結果如下:

(圖二)

可以看出,我們的**起了效果,獲得了丟擲的異常資訊。雖然這個資訊有點用,但是我仍然不能確定是什麼原因導致的這個錯誤,所以我把上面(圖一)中urls所有值都列印出來,然後與url(進行urljoin操作,結果都正確,沒出現異常。經過仔細觀察上面的(圖二),發現response.url並不是「而是:

url('')
不錯,這個玩意居然是乙個url物件,乙個字串與乙個url物件比較,當然會出錯啦。那怎麼將url變成字串呢?

我們只知道它是乙個url物件,並不知道url物件裡面有些什麼方法?通過aiohttp文件,我找到了以下網頁:

列出重點:

>>> url = url('http://εμπορικόσήμα.eu/путь/這裡')

>>> str(url)

''>>> url.human_repr()

'http://εμπορικόσήμα.eu/путь/這裡'

可以看出可以通過str()函式對url編碼成乙個字串,或者通過human_repr()函式返回字串形式。由於xkcd.com都是些英文網頁,所以我直接採用了str()形式:

for url in urls:

normalized = urllib.parse.urljoin(str(response.url), url)

defragmented, frag = urllib.parse.urldefrag(normalized)

if self.url_allowed(defragmented):

links.add(defragmented)

再執行程式,控制台會出現傳送請求後得到的各種日誌資訊!

然而,即便如此,此crawler專案也還有許多問題需要解決。此文算是邁出重要一步!!!

IIS 500內部錯誤之解決辦法

問題起因 iis已經啟動但是web無法使用 ie返回500內部錯誤 記錄如下 由於在下列系統 api 錯誤,com 服務無法初始化。它通常是由本地計算機的系統資源儲存問題引起的。cryptacquirecontext 程序名稱 dllhost.exe 該錯誤的嚴重性已導致程序終止。錯誤 0x8009...

2019Cloud500榜單發布榮之聯斬獲多項大獎

12 月 12 日,2019 全國百萬企業上雲年會暨cloud500 雲生態峰會在北京隆重召開,會上公布了全國百萬企業上雲服務商圖譜,同時對 2019 年度雲計算百強企業及 金雲朵 獲獎單位進行表彰。榮之聯憑藉在雲計算領域的領先實力及突出貢mdwnuic獻,獲評 2019 卓越雲管理服務提供商 並榮...

系統問題解決記錄 IIS 500內部錯誤之解決辦法

0這兩天電腦被病毒搞到頭痛,老殺不乾淨。把系統重新安裝了。用了一晚上rising,mcafee狂殺。看著清爽的桌面,終於可以睡了個好覺拉!靠,明天起來又發現剛安裝好的windows xp sp2,iis就不能執行了。按照以往歷史。基本每次安裝windows 2003 windows2000,wind...