网页爬虫 - 博客园博客中的图片怎么用python爬取下来?
问题描述
写了一小段代码,爬取博客园博客中的图片,这段代码对部分链接有效,还有一部分链接一爬就报错,这是什么原因呢?
#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='https://www.haobala.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'
则立马报错
求解决,谢谢!
问题解答
回答1:错误提示已经很明显了,你去看下网页源代码,匹配到的第一张图片是一个GIF格式的,并且还是相对路径,所以你是下载不到的,故提示IOerror,就算你下载到了,因为你指定了格式为JPG,你也打不开。 因此你需要做的就是判断和筛选
for imgurl in imglist: if 'gif' not in imgurl:urllib.urlretrieve(imgurl, ’%s.jpg’ % x)x += 1
看下我增加的地方,当然这只是最简单的判断,但可以保证你第二个程序不会报错,也是给你一个思路!
相关文章:
1. boot2docker无法启动2. webpack - vue-cli写的项目(本地跑没有问题),准备放到Nginx服务器上,有什么配置需要改的?还有怎么部署?3. javascript - iview 打包之后 找不到自带的icon图片,而且路径重复,点解4. 问题Unknown column ’’ in ’where clause’5. javascript - 哪位大神指导下,如何实现今日头条头部导航列表,点那个类型,哪种类型就居中了?6. 微信公众号发送模板消息返回错误410007. 这是什么情况???8. redis存储微博点赞的人,如何存储?9. html - 为什么我给div设置display:inline然后设置height还是有效呢10. media-query - 请教为何CSS3媒体查询语法不能生效?
