首页 > 编程知识 正文

python下载网络上一张图片(python怎么下载图片)

时间:2023-12-22 11:30:28 阅读:318971 作者:TLQY

本文目录一览:

python下载图片到本地路径

这里有2种方法,我这里是因为要保存验证码到本地:

执行一遍后取路径查看,

Python3.xx中写爬虫,下载图片除了urlretrieve方法,还有什么库的什么方法呢?

Part 1. urllib2

urllib2是Python标准库提供的与网络相关的库,是写爬虫最常用的一个库之一。

想要使用Python打开一个网址,最简单的操作即是:

your_url = ""html = urllib2.urlopen(your_url).read()12

这样所获得的就是对应网址(url)的html内容了。

但有的时候这么做还不够,因为目前很多的网站都有反爬虫机制,对于这么初级的代码,是很容易分辨出来的。例如本文所要下载图片的网站,上述代码会返回HTTPError: HTTP Error 403: Forbidden错误。

那么,在这种情况下,下载网络图片的爬虫(虽然只有几行代码,但一个也可以叫做爬虫了吧,笑),就需要进一步的伪装。

要让爬虫伪装成浏览器访问指定的网站的话,就需要加入消息头信息。所谓的消息头信息就是在浏览器向网络服务器发送请求时一并发送的请求头(Request Headers)信息和服务器返回的响应头(Response Headers)信息。

例如,使用FireFox打开时所发送的Request Headers的部分内容如下:

Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234

还有一些其他属性,但其中伪装成浏览器最重要的部分已经列出来了,即User-Agent信息。

要使用Headers信息,就不能再仅仅向urlopen方法中传入一个地址了,而是需要将HTTP Request的Headers封装后传入:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123

这样,就获得了网站的html内容。

接下来,就需要从html去获取图片的链接。

Part 2. HTMLParser

HTMLParser是Python提供的HTML解析库之一。

但Python提供的这个类中很多方法都没有实现,因而基本上这个库只负责进行解析,但解析完了什么都不做。所以如果需要对HTML中的某些元素进行加工的话,就需要用户自己去实现其中的一些方法。本文仅实现其中的handle_starttag方法:

class MyHTMLParser(HTMLParser): #继承HTMLParser类

def __init__(self): #初始化

HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):

#参数tag即由HTMLParser解析出的开始标签,attrs为该标签的属性

if tag == "img": #下载图片所需要的img标签

if len(attrs) == 0: pass

else: for (variable, value) in attrs: #在attrs中找到src属性,并确定其是我们所要下载的图片,最后将图片下载下来(这个方法当然也有其他的写法)

if variable == "src" and value[0:4] == 'http' and value.find('x') = 0:

pic_name = value.split('/')[-1] print pic_name

down_image(value, pic_name)123456789101112131415

Part 3. 下载图片

从handle_starttag方法中,我们已经获得了图片的url,那么,最后一步,我们要下载图片了。

当然,要获得网络上的图片,自然也需要向服务器发送请求,一样需要用到urllib2这个库,也需要用到上面所用到的请求头。

以下是down_image()方法的主要代码:

binary_data = urllib2.urlopen(req).read()

temp_file = open(file_name, 'wb')

temp_file.write(binary_data)

temp_file.close()1234

因为这次打开的网址是个图片,所以urllib2.urlopen(req).read()所获取的就是图片的数据,将这些数据需要以二进制的方式写入本地的图片文件,即将图片下载下来了。

因为图片的url的最后一部分是图片的名字,所以可以直接用做本地的文件名,不用担心命名冲突,也不用担心后缀不符,很是方便。

Part 4. getFreeImages.py

这个下载图片的脚本的完整代码如下:

import urllib2,osfrom HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

def __init__(self):

HTMLParser.__init__(self) #self.links = {}

def handle_starttag(self, tag, attrs):

#print "Encountered the beginning of a %s tag" % tag

if tag == "img": if len(attrs) == 0: pass

else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') = 0:

pic_name = value.split('/')[-1] print pic_name

down_image(value, pic_name)def down_image(url,file_name):

global headers

req = urllib2.Request(url = url, headers = headers)

binary_data = urllib2.urlopen(req).read()

temp_file = open(file_name, 'wb')

temp_file.write(binary_data)

temp_file.close()if __name__ == "__main__":

img_dir = "D:\Downloads\domain images"

if not os.path.isdir(img_dir):

os.mkdir(img_dir)

os.chdir(img_dir) print os.getcwd()

url = ""

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}

all_links = []

hp = MyHTMLParser() for i in range(1,30):

url = '' + str(i) + '/'

req = urllib2.Request(url = url, headers = headers)

content = urllib2.urlopen(req).read()

hp.feed(content)

hp.close()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

使用Python爬虫下载图片,得到的图片不显示?

你需要检查一下你的结果,看看是否请求成功了。可能服务器返回的并不是一个图片,但是你强制给他写入到图片格式文件中了,所以没办法显示。

你可以通过输出response或者使用抓包软件来检查。

python抓取网页上图片

正则表达式匹配的url有错误

for x in add:

print x # 这里可以看到报错的时候是 url 错误

dirpath = os.path.join('C:\Users\lilinan\Desktop\新建文件夹','%s.jpg' % t)

urllib.request.urlretrieve(x,dirpath)

t+=1

python 网络爬虫,怎么自动保存图片

def download_poster_image(movie):   #定义一个下载图片函数

    src = movie  #取出它的url

    r = requests.get(src)   #去获取这个url

    fname = url.split('/')[-1]   #从url里面获取这个文件名

    with open(fname, 'wb') as f:  #应答的内容写进去并且使用二进制

        f.write(s.content)

    movie['poster-path'] = fname

res = requests.get(url)

img_url = res.xpath('//img[@class="q-img-item"]/@src')

movie = img_url 

download_poster_image(movie) #执行函数

如何使用python批量下载图片

1、python有socket、httplib等模块能进行与网站间通信,如果有图片url集合,就直接使用这些库下载

2、如果是一些网页中的url,可以先把网页取下来,在用HTMLParser,sgmllib,htmllib等模块进行页面解析,提取出url集合

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。