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 -------------------------------------------- ...
随机推荐
- Podfile升级后的影响
之前项目里用的Podfile都是版本 0.39 后面有一天电脑格盘重装以后cocoapods装的版本是 1.0.0.beta.6 那么问题来了,在下载或者clone一下项目后,经常是需要自己安装第三方 ...
- Camera
Unity摄像机Viewport使用 http://blog.sina.com.cn/s/blog_64ab3f630100y7e7.html http://blog.sina.com.cn/s/ ...
- Robot Framework--安装篇
一.安装包 1.Python 2.robotframework 3.selenium 4.selenium2library 5.WxPython 6.安装RIDE 二.安装过程 1.安装python ...
- Django笔记-登陆注册-1
1.项目结构(eclipse+PyDev工具)(粘上来后代码缩进格式没有了,就先不整了) 2.关键代码: test_log03.settings.py INSTALLED_APPS = ( 'djan ...
- 使用Xunit来进行单元测试
不管你爱与不爱,单元测试对于一个软件的长治久安还是必不可少的一环.在Visual Studio 2012后,VS中的测试浏览器也能与第三方的集成了,用起来还是非常方便的.目前在.Net框架下的测试工具 ...
- 【转】SPDY协议
SPDY协议 - v3 原文:SPDY Protocol - Draft 3 翻译:邱鹏滔(QQ: 95350530,主页:www.fireflysource.com) 1 概述 HTTP协议的瓶颈在 ...
- Yii2 高级版新建一个 Api 应用
原文地址:http://www.getyii.com/topic/28 先在项目的根目录下复制一份 backend 为 api: cp backend/ api -r 拷贝 api 环境 cp -a ...
- Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)
BeginRequest事件处理的作用是确保所有Shell已经加载,或者在扩展有变化的时候重新加载. void IOrchardHost .BeginRequest() { ...
- Mysql表分区几种方式
自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...
- C#数字格式化
格式规范的完整形式:{index [,width][:formatstring]} index是此格式程序引用的格式字符串之后的参数,从零开始计数:width(可选) 是要设置格式的字段的宽度,wid ...