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 -------------------------------------------- ...
随机推荐
- 使用System Sound Services 播放音效(最简单,比较底层),调用AudioServicesPlaySystemSound()
1.适用范围:一些很小的提示或警告音频. 2.使用限制: 声音长度不能超过30秒 声音文件必须是PCM或IMA4(IMA/ADPCM)格式.(有时候可播放一些特殊的.mp3) 打包成.caf..aif ...
- Robot Framework--06 用户关键字User Keyword
转自:http://blog.csdn.net/tulituqi/article/details/7906130 在我们做自动化案例的时候,用的最多的主要是用户关键字.说到关键字,大体上可以分为测试库 ...
- OC-SEL
SEL SEL对应方法的地址 _cmd代表当前方法 1. 方法的存储位置 每个类的方法列表都存储在类对象中 每个方法都有一个与之对应的SEL类型的对象 根据一个SEL对象就可以找到方法的地址,进而调 ...
- github常见操作和常见错误!
本人总结: 1.问题: fatal: Not a git repository (or any of the parent directories) 解决: 本地库还没有创建,请先用git init ...
- oracle 的wm_concat函数使用
转载自:http://blog.itpub.net/post/42245/522757 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来 ...
- ajax实例详解
页面通过ajax和后台进行数据交互是非常简洁且方便的.特别是封装成json数据格式. 此处使用的是jQuery的ajax var params = { version:new Date().getTi ...
- Android 环境配置
一.开发环境配置 1.使用 eclipse 需要下载安装 Android SDK.Eclipse.ADT 插件. 也可以直接下载整合好的 ADT Bundle 包,下载地址: http://devel ...
- AngularJS 使用$sce控制代码安全检查
由于浏览器都有同源加载策略,不能加载不同域下的文件.也不能使用不合要求的协议比如file进行访问. 在angularJs中为了避免安全漏洞,一些ng-src或者ng-include都会进行安全校验,因 ...
- codevs2574 波兰表达式
题目描述 Description 对于 加.减.乘.除这种四则运算的表达式,我们使用的是先乘除.后加减的从左到右的顺序进行运算,如果要指定特定的顺序,就要增加括号进行表达,比如 (A+B)*C , A ...
- AlwaysOn可用性组功能测试(一)--AlwaysOn故障转移测试
具体测试环境请参考: AlwaysOn可用性组测试环境安装与配置(一)--SQL群集环境搭建 AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL) 一. Alw ...