Python爬虫学习Python专题程序员

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

2014-06-04  本文已影响557人  无与童比

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

我先贴代码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多张。

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

上一篇下一篇

猜你喜欢

热点阅读