1. 程式人生 > >python2.7中urlretrieve( )函式的使用

python2.7中urlretrieve( )函式的使用

python2.7中的urllib.urlretrieve( )方法

1. urlretrieve()方法直接將遠端資料(圖片或者文件)下載到本地。具體引數為:

       urlretrieve(url, filename=None, reporthook=None, data=None)

  • 引數filename指定了儲存本地路徑(如果引數未指定,urllib會生成一個臨時檔案儲存資料。)
  • 引數reporthook是一個回撥函式,當連線上伺服器、以及相應的資料塊傳輸完畢時會觸發該回調,我們可以利用這個回撥函式來顯示當前的下載進度。
  • 引數data指post導伺服器的資料,該方法返回一個包含兩個元素的(filename, headers) 元組,filename 表示儲存到本地的路徑,header表示伺服器的響應頭

2. 示例程式碼如下:

# encoding:utf-8
import requests
from lxml import etree
import urllib
import os
import re

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
}


def parse_page(url):
    # 1.獲取網頁請求
    response = requests.get(url, headers=headers)
    text = response.text
    # print text
    # 2.解析網頁內容
    html = etree.HTML(text)
    images = html.xpath("//div[@class='page-content text-center']//img[@class!='gif']")
    for img in images:
        # print etree.tostring(img)
        # img.get('data-original'):get方法可以得到‘data-original’屬性的值
        img_url = img.get('data-original')
        img_name = img.get('alt')
        img_name = re.sub(r'[\??!!\.。]', '', img_name)
        img_suffix = os.path.splitext(img_url)[-1]
        img_filename = img_name+img_suffix
        urllib.urlretrieve(img_url, "Images/"+img_filename, report_hook)


def report_hook(a, b, c):
    """回撥函式
    :param a:已經下載的資料塊
    :param b:資料塊的大小
    :param c:遠端檔案的大小
    :return:
    """
    per = 100.0*a*b/c
    if per > 100:
        per = 100
    print "%.2f%%" % per


def main():
    for x in range(1, 101):
        url = "http://www.doutula.com/photo/list/?page=%d" % x
        parse_page(url)
        # print url
        break


if __name__ == '__main__':
    main()

3. 執行結果為:

......
98.00%
98.84%
99.68%
100.00%

Process finished with exit code 0

Images資料夾下的檔案如下:


相關推薦

python2.7urlretrieve( )函式的使用

python2.7中的urllib.urlretrieve( )方法1. urlretrieve()方法直接將遠端資料(圖片或者文件)下載到本地。具體引數為:       urlretrieve(url, filename=None, reporthook=None, dat

Python2.7input和raw_input函式有什麼區別

1、input函式:         input函式會假設要求使用者輸入的是合法的Python表示式,什麼是合法的Python表示式呢?像37、3*4、‘name’都是合法的,分別代表整數37、數學表示式3乘4、字串name,而像x=3、name是不合法的。        

在centos 7 conda 環境和Python2.7 安裝遠程jupyter

配置 pass 準備 pen env conda 其他 nbsp 隔離 折騰了半天,為了能夠方便學習TensorFlow,搞了遠程的jupyter,方便在本地使用它,今天填了不少坑。 裝完後截圖: 下面是一些步驟: 檢查 Python 環境 CentOS 7

python2.7pip的安裝

最近在學python爬蟲的相關知識,需要用到一個beautifulsoup的網頁解析器,需要用的pip安裝相關的包,但是我的python資料夾中沒有scripts的資料夾,無法使用pip,然後只能在網上查詢如何下載pip,相關查找出現了很多的解決辦法,包括直接下載ez_se

python2.7編碼問題以及txt檔案讀寫的注意事項

首先,要清楚一點:在py檔案和python動態直譯器(命令列)中,輸入中文字串編碼是不一樣的,動態直譯器中預設編碼環境是ansi,比較麻煩(也有解決辦法),建議在py檔案中處理編碼問題。 python2.7中的字串有兩種形式:str”…”和 unicode u

Python2.7的for迴圈、while迴圈示例

print "\nFFFFFFFFFFfor迴圈 FFFFFFFFFF" # for-loop列印九九乘法表,金字塔形狀rows = range(1,10) cols = range(1,10) r

python2.7 構造帶u'的字串

python2.7 中由字串變數構造前面帶u的字串的方法: ss='test' sb=u''+str(ss) sb就是我們想要的前面帶u的字串 Python 2有兩種字串型別:Unicode字串和非U

Python2.7的比較和判斷程式碼例項

print"\n~~~~~~~ 如何判斷python物件的內容和物件的記憶體地址 ~~~~~~~~~"t1 = (1,2,3,4) t2 = (1,2,3,4)print id(t1);printid

Python2.7dict.values()+dict.values(),在Python3.5解決辦法

首先來看下在Python2.7中程式碼: w={ 'a':1, 'b':2, 'c':3 } b={ 'aa':4, 'bb':5, 'cc':6 } r=w.values()+b.values() print(

VMpython2.7運行skier遊戲,shell重啟問題!!!!!!

star 閃退 body shell script 問題: 代碼 rest win7 在虛擬機win7系統python2.7,在該python中運行了 父與子中的skier遊戲(代碼手寫), 出現如下問題: ================ RESTART: C:\Pyt

Windows7在Eclipse配置Python2.7+OpenCV

mage python2.7 .net face arc javase pack nump sele 1.從http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.ht

Linux安裝Python2.7

目錄 ron 文件 red ftw The find ack 並且 原文地址:http://www.jianshu.com/p/6425d18d3e47 安裝依賴的庫 yum -y install python-devel openssl openssl-devel

處理Python2.7讀寫文件的中文亂碼問題

創建 文本文件 odi 出現 print 文本 處理 ecs 報錯 1.設置默認編碼 在Python代碼中的任何地方出現中文,編譯時都會報錯,這時可以在代碼的首行添加相應說明,明確utf-8編碼格式,可以解決一般情況下的中文報錯。當然,編程中遇到具體問題還需具體分析啦。 #

Python2.7 Print函式

Print函式的各種用法 一、基礎用法 1.print語句可以向螢幕上輸出指定的文字。 例如: print 'Hello World!' 2.print語句也可以跟上多個字串,用逗號“,”隔開,就可以連成一串輸出: ps:print會依次列印每個字串,遇到逗號“,”會

Macpython2.7和python3.6的版本切換

之前博主已經安裝好了python3.6,可是Mac中的預設python版本仍然是python2.7。 首先參考一個部落格: https://blog.csdn.net/Tyro_java/article/details/78510301 如果安裝好了新版本,可以直接從博文中 檢查環境

win10系統如何使得python2.7 和python3.7同時共存

連結地址:https://www.cnblogs.com/recordtime/p/7017266.html 記錄本機python系列: python2.7.10 cmd下 python 直接進入python2.7 安裝庫 直接使用 pip install XXX python3.7.0 cad下

7月16日任務 shell函式 、shell的陣列、告警系統需求分析

  20.16 shell中的函式 函式就是把一段程式碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段程式碼時直接呼叫這個小單元的名字即可。 格式: function f_name() {     &nbs

python3無法import cv2,importError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so

這個問題就是importError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so,為什麼會出現這個問題?因為當初安裝cv2的時候,預設弄在了Python2,所以導致這個錯誤的產生,解決辦法在這篇文章中被找到。不過裡面的解決辦法太多,好多

牛客網《劍指offer》之Python2.7實現:二進位制1的個數

題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 思路 來源牛客網高玩: 如果一個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1(如果最右邊的1後

Python2語法簡記(7):函式

7 函式:def printme(str1, str2): def printme(str1, str2): "列印傳入的字串" # 函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。 print str1, str2 r