python小爬虫抓取搞笑图片V2.0

我们可以看出上一个小程序并没有使用很多的技巧,这个时候我想抓几千张图片。怎么办?

我先贴代码v2.0

需要安装第三方库bs4

from bs4 import BeautifulSoup
import os,urllib.request
beginNum = int(input("Please input (1111 -3111))\n"))
for i in range(beginNum,3111):
    pageUrl = 'http://www.76xh.com/tupian/'+str(i)+'.html'
    htmlDoc = urllib.request.urlopen(pageUrl).read()
    soup = BeautifulSoup(htmlDoc)
    print ("正在下载第(%d)"%(i))
    divHtml = soup.find_all("div",class_="pic_text")
    imgUrl = 'http://www.76xh.com' + divHtml[0].img.attrs['src']
    data = urllib.request.urlopen(imgUrl).read()
    fileName = soup.title.contents[0] + '.jpg'
    filePath = os.path.join('C:/img',fileName)
    image = open(filePath,'wb')
    image.write(data)
    image.close()
    
print ('OK')

可以尝试运行一下,发现下载了几张图片以后基本上就停止下载了?
为什么呢?
这让我想起了一句比较经典的话,大致的意思是这样子的,一个程序的核心代码如果只有几十行的话,写成一个足够适应绝大部分情况的程序需要写成几百行。
在这个过程中,出现了一个问题,就是img的链接地址失效了怎么办?
不卖关子了,我们为了解决各种异常情况,引入了一个异常机制。

from bs4 import BeautifulSoup
import os,urllib.request
beginNum = int(input("Please input (1111 -3111))\n"))
for i in range(beginNum,3111):
try:
    pageUrl = 'http://www.76xh.com/tupian/'+str(i)+'.html'
    htmlDoc = urllib.request.urlopen(pageUrl).read()
    soup = BeautifulSoup(htmlDoc)
    print ("正在下载第(%d)"%(i))
    divHtml = soup.find_all("div",class_="pic_text")
    imgUrl = 'http://www.76xh.com' + divHtml[0].img.attrs['src']
    data = urllib.request.urlopen(imgUrl).read()
    fileName = soup.title.contents[0] + '.jpg'
    filePath = os.path.join('C:/img',fileName)
    image = open(filePath,'wb')
    image.write(data)
    image.close()
    pass
 except Exception as e:
    continue
    raise
 else:
    pass
 finally:
    pass
print ('OK')

通过一个简单的continue语句将错误的下载直接跳过去这样不就是很好了吗?
运行
输入一个数字1111-3111之间,它会一直下载到3111这个网页的图片。大致估计一下,我下载了1700多张。

这个程序还是有很大的缺点的,下载速度太慢,那怎么办?我们下回见分晓

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大部分小程序都是基于py2.7的,我于是便想直接出一个py3.4最新版本的教程。大致看一下第一篇了解一下的一些概念...
    无与童比阅读 8,455评论 3 7
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,950评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,302评论 19 139
  • 今睌入班,纪律委员彭意雨拿出了最近的班集违纪同学记录,记录的详细,细致,出入帐目很清晰。并且自己勇于承担责任,钱丢...
    傻人福气阅读 1,911评论 0 4
  • 近期心情其实很复杂,原以为在孕早期会得到宝一样的呵护,其实不然,有的就是自己好好休息,多吃水果多吃蔬菜,好像和每个...
    阅读 1,157评论 0 0