前言

批量下载网页上的图片需要三个步骤:

  1. 获取网页的URL
  2. 获取网页上图片的URL
  3. 下载图片

例子

from html.parser import HTMLParser
import urllib.request
import os,uuid,sys #第1步:
class PageLinkParser(HTMLParser):
def __init__(self,strict=False):
HTMLParser.__init__(self,strict)
self.all=[]
def handle_starttag(self,tag,attrs):
if tag=='a':
for i in attrs:
if i[0]=='href':
if i[1] not in self.all:
self.all.append(i[1]) def getPageLinks(url):
doing=[url]
done=[]
while len(doing)>=1:
x=doing.pop();
done.append(x)
print(x)
try:
f=urllib.request.urlopen(x)
parser=PageLinkParser(strict=False)
parser.feed(f.read().decode('utf-8'))
for i in parser.all:
if i not in done:
#doing.insert(0,i) #在此就不遍历了。
done.append(i)
parser.all=[]
except:
continue
return done #第2步:
class ImgLinkParser(HTMLParser):
def __init__(self,strict=False):
HTMLParser.__init__(self,strict)
self.all=[]
def handle_starttag(self,tag,attrs):
if tag=='img':
for i in attrs:
if i[0]=='src':
if i[1] not in self.all:
self.all.append(i[1]) def getImgLinks(url):
parser=ImgLinkParser(strict=False)
try:
f=urllib.request.urlopen(url)
parser.feed(f.read().decode('utf-8'))#解码格式,根据网页的编码格式而定。
finally:
return parser.all #第3步:
def loadImg(l):
for i in l:
i=i.strip()
print(i)
try:
f=open(os.path.join(os.getcwd(),uuid.uuid4().hex+'.jpg'),'wb') #防止文件名重复,使用UUID
f.write(urllib.request.urlopen(i).read())
f.close()
except:
print('error:',i)
continue #使用
if __name__=='__main__':
for i in getPageLinks('http://www.cnblogs.com/'):
loadImg(getImgLinks(i))

抛砖引玉

  1. 可以写一个函数,用于判断网页的编码格式
  2. 网页的遍历可以增加一些控制功能:比如只遍历同一个网站等。
  3. 下载功能可以使用多线程。

python——批量下载图片的更多相关文章

  1. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  2. python批量下载图片的三种方法

    一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: sele ...

  3. python 批量下载图片

    #coding=utf-8import re,sysimport urllib def getHtml(url): page = urllib.urlopen(url) html = page.rea ...

  4. python批量下载图片

    从数据库拿了一批图片地址,需要一张一张的把图片下载下来,自从有了python,想到能省事就琢磨如何省事. 代码如下: import urllib.requestf=open("E:\999\ ...

  5. python批量下载图片3

    import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...

  6. 【Python】nvshens按目录批量下载图片爬虫1.00(单线程版)

    # nvshens按目录批量下载图片爬虫1.00(单线程版) from bs4 import BeautifulSoup import requests import datetime import ...

  7. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  8. Python批量修改图片格式和尺寸

    Python批量修改图片格式和尺寸 备注: 1.导入了PIL库,是处理图片用的,很强大; 2.导入了的win32库,是判断隐藏文件用的,我们的项目需要删除隐藏文件,不需要的可以直接找到删除. 3.导入 ...

  9. scrapy操作mysql/批量下载图片

    1.操作mysql items.py meiju.py 3.piplines.py 4.settings.py -------------------------------------------- ...

随机推荐

  1. GMU 简单使用一

    <!doctype html> <html> <head> <title>iOS7风格的进度条</title> <meta chars ...

  2. 用Open Live Account写博文的第一篇文章,立个flag

    在设置的时候出了点问题,还好有blog这种神器,直接上网址http://www.cnblogs.com/yishujun/p/5328617.html 高亮插件来自 http://www.cnblog ...

  3. centos 7.0最小化安装 查看yum 所有安装的软件包~

    使用命令 yum list installed [root@localhost ~]# yum list installed 已加载插件:fastestmirror base | 3.6 kB 00: ...

  4. Python之路【番外篇】回顾&类的静态字段

    回顾 回顾:字符串.列表.字典的修改关于内存的情况 一.字符串 str1 = 'luotianshuai' str2 = str1 print id(str1) print id(str2) prin ...

  5. 常用的MIME类型

    .doc     application/msword .docx   application/vnd.openxmlformats-officedocument.wordprocessingml.d ...

  6. 【8-17】c++学习笔记01

    控制台程序不自动退出方法: system("pause"); getchar() 使用执行 ctrl+F5,开始调试 F5会出现闪退 动态内存分配 //construct c st ...

  7. php对uploads文件的处理问题的解决

    解决uploads问题的要点有几点: 参考这篇文章 第一, 在php.ini文件中, 有file_uploads这一节 file_uploads = On ;是否开启文件上传功能, 该功能有很大的安全 ...

  8. URAL1826. Minefield 题解

    原题: http://acm.timus.ru/problem.aspx?space=1&num=1826 1826. MinefieldTime limit: 0.5 secondMemor ...

  9. C#委托全解析

    什么是委托?                                                                                       委托类似于C语 ...

  10. js中的换算小技巧

    之前自己一直使用~~运算符来把‘112222’字符型的数值换算成整型的数值 但今天调试程序发现了一些问题 ~~'999'=>999 ~~'111111999'=>111111999 这些都 ...