亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

【Python】Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁下載文件

 更新時(shí)間:2016年11月19日 14:48:14   作者:xiaoguaihai  
這篇文章主要介紹了Python的urllib模塊、urllib2模塊批量進(jìn)行網(wǎng)頁下載文件,就是一個(gè)簡單的從網(wǎng)頁抓取數(shù)據(jù)、下載文件的小程序,需要的可以了解一下。

由于需要從某個(gè)網(wǎng)頁上下載一些PDF文件,但是需要下載的PDF文件有幾百個(gè),所以不可能用人工點(diǎn)擊來下載。正好Python有相關(guān)的模塊,所以寫了個(gè)程序來進(jìn)行PDF文件的下載,順便熟悉了Python的urllib模塊和ulrllib2模塊。

1、問題描述

需要從http://www.cvpapers.com/cvpr2014.html上下載幾百個(gè)論文的PDF文件,該網(wǎng)頁如下圖所示:

2、問題解決

通過結(jié)合Python的urllib模塊和urllib2模塊來實(shí)現(xiàn)自動(dòng)下載。代碼如下:

test.py

#!/usr/bin/python 
# -*- coding:utf-8 -*- 
 
import urllib              #導(dǎo)入urllib模塊 
import urllib2             #導(dǎo)入urllib2模塊 
import re               #導(dǎo)入正則表達(dá)式模塊:re模塊 
 
def getPDFFromNet(inputURL): 
  req = urllib2.Request(inputURL) 
  f = urllib2.urlopen(req)         #打開網(wǎng)頁 
  localDir = 'E:\downloadPDF\\'        #下載PDF文件需要存儲(chǔ)在本地的文件夾 
  urlList = []            #用來存儲(chǔ)提取的PDF下載的url的列表 
  for eachLine in f:          #遍歷網(wǎng)頁的每一行 
    line = eachLine.strip()       #去除行首位的空格,習(xí)慣性寫法 
    if re.match('.*PDF.*', line):      #去匹配含有“PDF”字符串的行,只有這些行才有PDF下載地址 
      wordList = line.split('\"')    #以"為分界,將該行分開,這樣就將url地址單獨(dú)分開了 
      for word in wordList:      #遍歷每個(gè)字符串 
        if re.match('.*\.pdf$', word): #去匹配含有“.pdf”的字符串,只有url中才有 
          urlList.append(word)  #將提取的url存入列表 
  for everyURL in urlList:         #遍歷列表的每一項(xiàng),即每一個(gè)PDF的url 
    wordItems = everyURL.split('/')     #將url以/為界進(jìn)行劃分,為了提取該P(yáng)DF文件名 
    for item in wordItems:       #遍歷每個(gè)字符串 
      if re.match('.*\.pdf$', item):   #查找PDF的文件名 
        PDFName = item     #查找到PDF文件名 
    localPDF = localDir + PDFName      #將本地存儲(chǔ)目錄和需要提取的PDF文件名進(jìn)行連接 
    try:            
      urllib.urlretrieve(everyURL, localPDF) #按照url進(jìn)行下載,并以其文件名存儲(chǔ)到本地目錄 
    except Exception,e: 
      continue 
 
getPDFFromNet('http://www.cvpapers.com/cvpr2014.html') 

注意:

(1)第1、6、8、23行分別多謝了一個(gè)“\”來進(jìn)行轉(zhuǎn)義;

(2)第27行的urlretrieve函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)就是目標(biāo)url;第二個(gè)參數(shù)是保存的文件絕對(duì)路徑(含文件名),該函數(shù)的返回值是一個(gè)tuple(filename,header),其中的filename就是第二個(gè)參數(shù)filename。如果urlretrieve僅提供1個(gè)參數(shù),返回值的filename就是產(chǎn)生的臨時(shí)文件名,函數(shù)執(zhí)行完畢后該臨時(shí)文件會(huì)被刪除參數(shù)。第3個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),當(dāng)連接上服務(wù)器、以及相應(yīng)的數(shù)據(jù)塊傳輸完畢的時(shí)候會(huì)觸發(fā)該回調(diào)。其中回調(diào)函數(shù)名稱可任意,但是參數(shù)必須為三個(gè)。一般直接使用reporthook(block_read,block_size,total_size)定義回調(diào)函數(shù),block_size是每次讀取的數(shù)據(jù)塊的大小,block_read是每次讀取的數(shù)據(jù)塊個(gè)數(shù),taotal_size是一一共讀取的數(shù)據(jù)量,單位是byte??梢允褂胷eporthook函數(shù)來顯示讀取進(jìn)度。
如果想顯示讀取進(jìn)度,則可以講第三個(gè)參數(shù)加上,將上述程序第27行改為如下:

urllib.urlretrieve(everyURL, localPDF, reporthook=reporthook) 

而reporthook回調(diào)函數(shù)的代碼如下:

def reporthook(block_read,block_size,total_size): 
 if not block_read: 
 print "connection opened"; 
 return 
 if total_size<0: 
 #unknown size 
 print "read %d blocks (%dbytes)" %(block_read,block_read*block_size); 
 else: 
 amount_read=block_read*block_size; 
 print 'Read %d blocks,or %d/%d' %(block_read,block_read*block_size,total_size); 

綜上所述,這就是一個(gè)簡單的從網(wǎng)頁抓取數(shù)據(jù)、下載文件的小程序,希望對(duì)正在學(xué)習(xí)Python的同學(xué)有幫助。謝謝!

相關(guān)文章

  • Python編程使用有限狀態(tài)機(jī)識(shí)別地址有效性

    Python編程使用有限狀態(tài)機(jī)識(shí)別地址有效性

    這篇文章主要介紹了Python編程中如何使用有限狀態(tài)機(jī)識(shí)別地址有效性,如何識(shí)別一個(gè)地址是否有效,確切的講,如何編程識(shí)別一個(gè)中國地址是否有效
    2021-09-09
  • Django2 連接MySQL及model測(cè)試實(shí)例分析

    Django2 連接MySQL及model測(cè)試實(shí)例分析

    這篇文章主要介紹了Django2 連接MySQL及model測(cè)試,結(jié)合實(shí)例形式分析了Django2框架使用pymysql庫進(jìn)行mysql數(shù)據(jù)庫連接與model調(diào)用測(cè)試方法,需要的朋友可以參考下
    2019-12-12
  • Django微信小程序后臺(tái)開發(fā)教程的實(shí)現(xiàn)

    Django微信小程序后臺(tái)開發(fā)教程的實(shí)現(xiàn)

    這篇文章主要介紹了Django微信小程序后臺(tái)開發(fā)教程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • np.where在多維數(shù)組的應(yīng)用方式

    np.where在多維數(shù)組的應(yīng)用方式

    這篇文章主要介紹了np.where在多維數(shù)組的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python 爬蟲模擬登陸知乎

    Python 爬蟲模擬登陸知乎

    這篇文章主要介紹了Python 爬蟲模擬登陸知乎的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • python中[[]] * (n)和[[] for _ in range(n)]的區(qū)別詳解

    python中[[]] * (n)和[[] for _ in 

    本文主要介紹了python中[[]] * (n)和[[] for _ in range(n)]的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Python的Django框架中的select_related函數(shù)對(duì)QuerySet 查詢的優(yōu)化

    Python的Django框架中的select_related函數(shù)對(duì)QuerySet 查詢的優(yōu)化

    這篇文章主要介紹了Python的Django框架中的select_related函數(shù)對(duì)QuerySet查詢的優(yōu)化,以減少數(shù)據(jù)庫的查詢次數(shù)為目的,需要的朋友可以參考下
    2015-04-04
  • Python開發(fā)之射擊闖關(guān)游戲的實(shí)現(xiàn)

    Python開發(fā)之射擊闖關(guān)游戲的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)射擊闖關(guān)游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下
    2023-01-01
  • OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    OpenCV 圖像旋轉(zhuǎn)、平移、縮放操作代碼

    這篇文章主要介紹了OpenCV 圖像旋轉(zhuǎn)、平移、縮放,本文是 OpenCV圖像視覺入門之路的第7篇文章,本文詳細(xì)的進(jìn)行了圖像的縮放 cv2.resize()、旋轉(zhuǎn) cv2.flip()、平移 cv2.warpAffine()等操作,需要的朋友可以參考下
    2022-12-12
  • Python的Django框架中的數(shù)據(jù)過濾功能

    Python的Django框架中的數(shù)據(jù)過濾功能

    這篇文章主要介紹了Python的Django框架中的數(shù)據(jù)過濾功能,為更新數(shù)據(jù)庫數(shù)據(jù)時(shí)的數(shù)據(jù)查找提供了方便,需要的朋友可以參考下
    2015-07-07

最新評(píng)論