爬蟲怎麼保存圖片?

我已經爬到了http.xxxx.jpg這樣的連接
但是不知道怎麼保存到本地


import requests
for i, j in enumerate(imgUrlList):
with open("E:/{0}.jpg".format(i), "wb") as file:
file.write(requests.get(j).content)

用with進行上下文管理不需要人為的關閉文件,一旦程序退出with模塊文件會自動關閉。本地地址可以隨便換,這裡用的是requests庫如果沒有安裝直接命令行安裝:

pip3 install requests

enumerate函數的功能簡單解釋,例如:

list_ = ["a", "b", "c"]
for i, j in enumerate(list_):
print([i, j])

輸出結果為:

[0, "a"]
[1, "b"]
[2, "c"]

在這裡 i 迭代的是list_的索引值,j 迭代的是元素值!


如果有了圖片網址,下載這個圖片本來是相當簡單的,因為各種編程語言都有現成的http client端的函數庫,直接發一個get消息就把二進位圖片下載下來了,原樣保存到硬碟即可。

但是,很多網站做了訪問限制,比如,網址可以變成一個短暫有效的,或者要檢查一些參數,或者檢查cookie狀態等等,這樣就會約束圖片的下載行為,一旦脫離了原始網頁的會話環境,下載行為就被禁止了。在這種情況下,應該模擬瀏覽器的行為,即時存儲看到的圖片


這種時候把代碼扔上來我倒覺得不友好。我和題主一個水平,也許還比他強一點,然而讀起各位的代碼也並不輕鬆。
首先題主不知道怎麼保存圖片,很有可能不清楚file和open的用法。何況是初級教程見不到的或者說很少見的with之類?
所以切入點應該是說
題主先要搞清楚Python 怎麼打開保存文件,file 和open的方法和參數的意義。
知道了這個自然知道怎麼保存圖片,把圖片get到本地寫入文件就好了。
講道理,這個問題百度比知乎好用個幾百倍吧。


如果是Python3的話,我介紹一種不需要下載拓展庫的方法。

import urllib.request

url = "http://images2015.cnblogs.com/blog/801450/201608/801450-20160813010011500-211439264.png"
web = urllib.request.urlopen(url)
data = web.read()
f = open("d:/a.png","wb")
f.write(data)
f.close()

其實這種方法同樣適用於其他格式的文件,只要得到鏈接就行。
參考:Python3批量爬取網頁圖片

當然,如果用requests確實可以實現更多功能,單純這個問題的話用urllib就夠用了。


import urllib
import os

url = "http.......JPG"
url_path,img_name = os.path.split(url)
#保存到當前運行模塊的文件夾內
urllib.urlretrieve(url,img_name)

手機打的 請多多包含 希望對您有所幫助


給你三種方法:
1.使用urlopen方式

import urllib
url = "http://difang.kaiwind.com/zhejiang/jctp/201407/18/W020140718488039321020.jpg"
data = urllib.urlopen(url).read()
f = file("save path","wb")
f.write(data)
f.close()

2.使用urlretrieve

import urllib
url = "http://difang.kaiwind.com/zhejiang/jctp/201407/18/W020140718488039321020.jpg"
urllib.urlretrieve(url,"save path")

3.使用PIL庫(重點,使用這種方法的人少,但是通用各種圖片,不用擔心像素太大之類的問題)

import requests
from cStringIO import StringIO
from PIL import Image
url = "http://www.pss-system.gov.cn/sipopublicsearch/servlet/rm/DownLoadServlet?rid=3632624374blobId=3129238429"
response = requests.get(url)
img = Image.open(StringIO(response.content))
img.save("save path")

我的csdn原文博客鏈接:python下載網頁圖片方法總結(含打開網頁提示下載) - sinat_33455447的博客 - 博客頻道 - CSDN.NET


用urlretrivel或者requests都可以


可以參考我寫的爬蟲, 帶進度條
https://github.com/but0n/JianSo_Movie

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
__author__ = "but0n"
from multiprocessing import Pool, Manager
import requests, sqlite3, os, hashlib

mes = Manager()
s = mes.dict({"label" : "NONE", "title":"none", "IMG":"none", "index":0, "total":10})
def commit(opt):
os.system("clear")
print("33[41;30m MESSAGE: %-47s33[m" % opt["label"])
print("33[46;30m PATH: %-50s33[m

" % opt["IMG"][-30:])

print("33[0;35m TITLE33[m: %s

" % opt["title"])
bar_status = opt["index"]*40/opt["total"]
status = opt["index"]*100/opt["total"]
print("
[%-40s]%s(%d/%d)" % ("&>"*bar_status, str(status)+"%", opt["index"], opt["total"]))

def saveImg(url):
name = url[-16:].replace("/","_")
try:
cache = requests.get("http://"+url, stream = True, timeout=10)
img = cache.content
with open(name,"w") as jpg:
s["label"] = cache.status_code
s["title"] = name
s["IMG"] = url
s["index"]+=1
commit(s)
jpg.write(img)
return
except Exception as e:
s["label"] = e
return

db = sqlite3.connect("../../mv.db")
s["label"] = "&<&<&<&<&<&<&<&<&<&<&<&<&< Database Connected &>&>&>&>&>&>&>&>&>&>"
commit(s)
cur = db.cursor()
cur.execute("SELECT * FROM movies")
data = cur.fetchall()

s["total"] = len(data)
commit(s)
for e in data:
saveImg(e[3])
print "ok"


推薦閱讀:

我爬網站的時候爬久了網站就會響應連接超時導致之後無法正常爬取,而此時網路很好但是有好多頁面都無法打開?
有什麼好的python3爬蟲入門教程或書籍嗎?
python是否可對進行了blob加密的視頻進行爬取操作呢?
爬蟲爬去簡書網站上面文章,get不到,求教原因?
請問這個熱力圖是怎麼製作的呢?

TAG:Python | 爬蟲計算機網路 | 網頁爬蟲 |