網(wǎng)頁爬蟲 - 博客園博客中的圖片怎么用python爬取下來?
問題描述
寫了一小段代碼,爬取博客園博客中的圖片,這段代碼對部分鏈接有效,還有一部分鏈接一爬就報(bào)錯(cuò),這是什么原因呢?
#coding=utf-8import urllibimport refrom lxml import etree#解析地址def getHtml(url): page = urllib.urlopen(url) html = page.read() return html#獲取地址并建樹url = 'http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html'html = getHtml(url)html = html.decode('utf-8')tree = etree.HTML(html)#保存圖片至本地reg = r’src='http://m.piao2010.com/wenda/(.*?)' alt’imgre = re.compile(reg)imglist = re.findall(imgre, html)x = 0for imgurl in imglist: urllib.urlretrieve(imgurl, ’%s.jpg’ % x) x += 1
如圖,可以正確爬取圖片
若把url換為
url = 'http://www.cnblogs.com/baronzhang/p/6861258.html'
則立馬報(bào)錯(cuò)
求解決,謝謝!
問題解答
回答1:錯(cuò)誤提示已經(jīng)很明顯了,你去看下網(wǎng)頁源代碼,匹配到的第一張圖片是一個(gè)GIF格式的,并且還是相對路徑,所以你是下載不到的,故提示IOerror,就算你下載到了,因?yàn)槟阒付烁袷綖镴PG,你也打不開。 因此你需要做的就是判斷和篩選
for imgurl in imglist: if 'gif' not in imgurl:urllib.urlretrieve(imgurl, ’%s.jpg’ % x)x += 1
看下我增加的地方,當(dāng)然這只是最簡單的判斷,但可以保證你第二個(gè)程序不會報(bào)錯(cuò),也是給你一個(gè)思路!
相關(guān)文章:
1. android - weex 項(xiàng)目createInstanceReferenceError: Vue is not defined2. PHPExcel表格導(dǎo)入數(shù)據(jù)庫怎么導(dǎo)入3. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)4. javascript - 如圖,百度首頁,查看源代碼為什么什么都沒有?5. pdo 寫入到數(shù)據(jù)庫的內(nèi)容為中文的時(shí)候?qū)懭雭y碼6. vue2.0+webpack 如何使用bootstrap?7. PHP類封裝的插入數(shù)據(jù),總是插入不成功,返回false;8. docker綁定了nginx端口 外部訪問不到9. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?10. ddos - apache日志很多其它網(wǎng)址,什么情況?
