日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...

發布時間:2025/3/19 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

1、問題描述

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

2、問題解決

通過結合Python的urllib模塊和urllib2模塊來實現自動下載。代碼如下:

test.py

#!/usr/bin/python

# -*- coding:utf-8 -*-

import urllib #導入urllib模塊

import urllib2 #導入urllib2模塊

import re #導入正則表達式模塊:re模塊

def getPDFFromNet(inputURL):

req = urllib2.Request(inputURL)

f = urllib2.urlopen(req) #打開網頁

localDir = 'E:\downloadPDF\\' #下載PDF文件需要存儲在本地的文件夾

urlList = [] #用來存儲提取的PDF下載的url的列表

for eachLine in f: #遍歷網頁的每一行

line = eachLine.strip() #去除行首位的空格,習慣性寫法

if re.match('.*PDF.*', line): #去匹配含有“PDF”字符串的行,只有這些行才有PDF下載地址

wordList = line.split('\"') #以"為分界,將該行分開,這樣就將url地址單獨分開了

for word in wordList: #遍歷每個字符串

if re.match('.*\.pdf$', word): #去匹配含有“.pdf”的字符串,只有url中才有

urlList.append(word) #將提取的url存入列表

for everyURL in urlList: #遍歷列表的每一項,即每一個PDF的url

wordItems = everyURL.split('/') #將url以/為界進行劃分,為了提取該PDF文件名

for item in wordItems: #遍歷每個字符串

if re.match('.*\.pdf$', item): #查找PDF的文件名

PDFName = item #查找到PDF文件名

localPDF = localDir + PDFName #將本地存儲目錄和需要提取的PDF文件名進行連接

try:

urllib.urlretrieve(everyURL, localPDF) #按照url進行下載,并以其文件名存儲到本地目錄

except Exception,e:

continue

getPDFFromNet('http://www.cvpapers.com/cvpr2014.html')

注意:

(1)第1、6、8、23行分別多謝了一個“\”來進行轉義;

(2)第27行的urlretrieve函數有3個參數:第一個參數就是目標url;第二個參數是保存的文件絕對路徑(含文件名),該函數的返回值是一個tuple(filename,header),其中的filename就是第二個參數filename。如果urlretrieve僅提供1個參數,返回值的filename就是產生的臨時文件名,函數執行完畢后該臨時文件會被刪除參數。第3個參數是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢的時候會觸發該回調。其中回調函數名稱可任意,但是參數必須為三個。一般直接使用reporthook(block_read,block_size,total_size)定義回調函數,block_size是每次讀取的數據塊的大小,block_read是每次讀取的數據塊個數,taotal_size是一一共讀取的數據量,單位是byte??梢允褂胷eporthook函數來顯示讀取進度。

如果想顯示讀取進度,則可以講第三個參數加上,將上述程序第27行改為如下:

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

而reporthook回調函數的代碼如下:

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);

綜上所述,這就是一個簡單的從網頁抓取數據、下載文件的小程序,希望對正在學習Python的同學有幫助。謝謝!

本文標題: 【Python】Python的urllib模塊、urllib2模塊批量進行網頁下載文件

本文地址: http://www.cppcns.com/jiaoben/python/170594.html

總結

以上是生活随笔為你收集整理的python下载网页中的pdf文件_【Python】Python的urllib模块、urllib2模块批量进行网页下载文件...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。