Python3实现Web网页图片下载
先来介绍一些pythonweb编程基础知识
1.GET与POST区别
1)POST是被设计用来向web服务器上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP请求的内容,而GET是在HTTP头部传输的;
2)POST与GET在HTTP中传送的方式不同,GET的参数是在HTTP的头部传送的,而Post的数据则是在HTTP请求的内容里传送;
3)POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;
4)GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M
2.Cookies技术
Cookies现在经常被大家提到,那么到底什么是Cookies,它有什么作用呢?
Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。
从本质上讲,它可以看作是你的身份证。但Cookies不能作为代码执行,也不会传送病毒,且为你所专有,并只能由提供它的服务器来读取。
保存的信息片断以“名/值”对(name-valuepairs)的形式储存,一个“名/值”对仅仅是一条命名的数据。
一个网站只能取得它放在你的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。
Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。
Python3通过Web网页图片下载基本功能点
- 要实现的主要功能点:
- 解析网页中的图片链接
- 对图片链接进行检测,如果图片格式图片大小不符合要求,则不下载
- 加入异常处理机制
- 自动文件名提取,从图片链接直接提取文件名
Python3通过Web网页图片下载参考代码:
fromurllibimportrequest
importthreading
fromtimeimportsleep,ctime
fromhtmlimportparser
defdownjpg(filepath,FileName="default.jpg"):
try:
web=request.urlopen(filepath)
print("访问网络文件"+filepath+"\n")
jpg=web.read()
DstDir="E:\\image\\"
print("保存文件"+DstDir+FileName+"\n")
try:
File=open(DstDir+FileName,"wb")
File.write(jpg)
File.close()
return
exceptIOError:
print("error\n")
return
exceptException:
print("error\n")
return
defdownjpgmutithread(filepathlist):
print("共有%d个文件需要下载"%len(filepathlist))
forfileinfilepathlist:
print(file)
print("开始多线程下载")
task_threads=[]#存储线程
count=1
forfileinfilepathlist:
t=threading.Thread(target=downjpg,args=(file,"%d.jpg"%count))
count=count+1
task_threads.append(t)
fortaskintask_threads:
task.start()
fortaskintask_threads:
task.join()#等待所有线程结束
print("线程结束")
classparserLinks(parser.HTMLParser):
filelist=[]
defhandle_starttag(self,tag,attrs):
iftag=='img':
forname,valueinattrs:
ifname=='src':
print(value)
self.filelist.append(value)
#print(self.get_starttag_text())
defgetfilelist(self):
returnself.filelist
defmain(WebUrl):
#globalsflist
if__name__=="__main__":
lparser=parserLinks()
web=request.urlopen(WebUrl)
#context=web.read()
forcontextinweb.readlines():
_str="%s"%context
try:
lparser.feed(_str)
exceptparser.HTMLParseError:
#print("parsererror")
pass
web.close()
imagelist=lparser.getfilelist()
downjpgmutithread(imagelist)
#downjpgmutithread(flist)
#WebUrl="http://www.baidu.com/"#要抓去的网页链接,默认保存到e盘
WebUrl="http://hi.baidu.com/yuyinxuezi/item/df0b59140a06be27f6625cd4"
main(WebUrl)
以上就是Python3实现Web网页图片下载的相关介绍,希望对大家的学习有所帮助。