回到最初的話題,為什麼我們通過:
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文件,我找到了以下網頁:
列出重點:
可以看出可以通過str()函式對url編碼成乙個字串,或者通過human_repr()函式返回字串形式。由於xkcd.com都是些英文網頁,所以我直接採用了str()形式:>>> url = url('http://εμπορικόσήμα.eu/путь/這裡')
>>> str(url)
''>>> url.human_repr()
'http://εμπορικόσήμα.eu/путь/這裡'
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...