標籤:

黃哥教Python初學者如何調試錯誤。

這裡zhihu.com/question/4882 有一個朋友,碰到一個問題,有錯誤。

import urllib.requestnimport renndef getHtml(url):n page = urllib.request.urlopen(url)n html = page.read()n return htmlnndef getImg(html):n reg = rsrc="(.+?.jpg)" pic_extnn html=html.decode(utf-8)n imgre = re.compile(reg)nn imglist = re.findall(imgre,html)n x = 0n for imgurl in imglist:n urllib.request.urlretrieve(imgurl,%s.jpg % x)n x+=1nhtml = getHtml("http://www.vip.com/?f=hao123mz")nnprint(getImg(html))n

他的錯誤是只輸出一個None,

1、先說明為啥是None

你的getHtml 函數不是用return 返回值,但這樣的函數有一個默認返回值為None

你print 後,所以輸出值為None

2、正則沒有匹配到任何東西。

在imglist = re.findall(imgre,html) 著句後面加一個print(imglist) 用來調試。

輸出結果為[], 說明正則沒有匹配到數據。那隻要修改正則即可。

請看黃哥下面修改的代碼。

# coding:utf-8nnimport urllib.requestnimport rennndef get_html(url):n page = urllib.request.urlopen(url)n html = page.read()n return htmlnnndef get_img(html):n reg = rdata-original="(.*?).jpg"n html = html.decode(utf-8)n imgre = re.compile(reg)nn imglist = re.findall(imgre, html)n if imglist:n imglist = [item + ".jpg" for item in imglist]nn for i, imgurl in enumerate(imglist):n urllib.request.urlretrieve(imgurl, %s.jpg % i)nnif __name__ == __main__:n html = get_html("http://www.vip.com/?f=hao123mz")n get_img(html)n

推薦閱讀:

計算機視覺 | Python OpenCV 3 使用背景減除進行目標檢測
python爬蟲之豆瓣音樂top250
Requests 庫學習筆記
巧用抓包 ― 爬遍SCU玻璃杯事件所有神回復
黑客你好,請使用Python編寫一個滲透測試探測器

TAG:Python |