python下載網路上一張圖片(python怎麼下載圖片)

本文目錄一覽:

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集合

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190800.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-30 09:07
下一篇 2024-11-30 09:07

相關推薦

  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論