python——批量下载图片
前言
批量下载网页上的图片需要三个步骤:
- 获取网页的URL
- 获取网页上图片的URL
- 下载图片
例子
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))
抛砖引玉
- 可以写一个函数,用于判断网页的编码格式
- 网页的遍历可以增加一些控制功能:比如只遍历同一个网站等。
- 下载功能可以使用多线程。
python——批量下载图片的更多相关文章
- 用python批量下载图片
一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...
- python批量下载图片的三种方法
一是用微软提供的扩展库win32com来操作IE: win32com可以获得类似js里面的document对象,但貌似是只读的(文档都没找到). 二是用selenium的webdriver: sele ...
- python 批量下载图片
#coding=utf-8import re,sysimport urllib def getHtml(url): page = urllib.urlopen(url) html = page.rea ...
- python批量下载图片
从数据库拿了一批图片地址,需要一张一张的把图片下载下来,自从有了python,想到能省事就琢磨如何省事. 代码如下: import urllib.requestf=open("E:\999\ ...
- python批量下载图片3
import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...
- 【Python】nvshens按目录批量下载图片爬虫1.00(单线程版)
# nvshens按目录批量下载图片爬虫1.00(单线程版) from bs4 import BeautifulSoup import requests import datetime import ...
- 用Python批量下载DACC的MODIS数据
本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...
- Python批量修改图片格式和尺寸
Python批量修改图片格式和尺寸 备注: 1.导入了PIL库,是处理图片用的,很强大; 2.导入了的win32库,是判断隐藏文件用的,我们的项目需要删除隐藏文件,不需要的可以直接找到删除. 3.导入 ...
- scrapy操作mysql/批量下载图片
1.操作mysql items.py meiju.py 3.piplines.py 4.settings.py -------------------------------------------- ...
随机推荐
- js 滚动加载iframe框中内容
var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest; //滚动加载 var scrollLoad =function( ...
- thinkphp传递参数
php文件输出 U() 跳转地址, echo U('Index/index',array('uid'=>1,'username'=>'wang','time'=>165465121) ...
- css 父层 透明 子层不透明Alpha
html代码 <div class="user2-register-bg"> <div class="user2-register-con"& ...
- Using Friendly URLs in ASP.NET Web Forms
Introduction Websites often need to generate SEO friendly URLs. In ASP.NET Web Forms applications, a ...
- 浅谈JavaScript中的正则表达式
引言 对于正则表达式我想作为程序员肯定使用过它,那天书般的表达方式,我用一次就记住它了.这篇博客先介绍一些正则表达式的内容,然后介绍JavaScript中对正则表达式特有的改进.下面开始介绍正则表达式 ...
- Block 及注意事项
block 概念 block 是 C 语言的 是一种数据类型,可以当作参数传递 是一组预先准备好的代码,在需要的时候执行 block 的注意事项 (1)block 在实现时就会对它引用到的它所在方法中 ...
- vim does not map customized key?
it is a long time confusing me that why my customized key map in vim does not work? Some vim configu ...
- 阿里云Centos配置iptables防火墙
虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptabl ...
- jquery动态改变my97日期格式
$('#qsrq').unbind('focus'); $('#zzrq').unbind('focus'); $('#qsrq').bind('focus', function () { Wdate ...
- PHP封装一个通用好用的文件上传处理类
封装一个文件上传类完成基本功能如下: 1.可上传多个或单个文件 2.上传成功返回一个或多个文件名 3.上传失败则返回每个失败文件的错误信息 上传类中的基本功能: 1.构造参数,用户可以自定义配置参数, ...