我正在python中構建爬蟲,我從頁面獲取了href
的列表。我如何使用請求庫下載python中的所有類型的文件
現在我有文件擴展名列表,下載喜歡
list = ['zip','rar','pdf','mp3']
我怎樣才能將文件從該網址到本地目錄使用python
編輯保存:
我正在python中構建爬蟲,我從頁面獲取了href
的列表。我如何使用請求庫下載python中的所有類型的文件
現在我有文件擴展名列表,下載喜歡
list = ['zip','rar','pdf','mp3']
我怎樣才能將文件從該網址到本地目錄使用python
編輯保存:
以您發佈的示例爲例:
import urllib2
from bs4 import BeautifulSoup
url = "http://www.example.com/downlaod"
site = urllib2.urlopen(url)
html = site.read()
soup = BeautifulSoup(html)
list_urls = soup.find_all('a')
print list_urls[6]
所以,你想要下一次獲取的URL大概是list_urls[6]['href']
。
第一個訣竅是這可能是一個相對的URL而不是絕對的。所以:
newurl = list_urls[6]['href']
absurl = urlparse.urljoin(site.url, newurl)
此外,您只想獲取文件,如果有正確的擴展,所以:
if not absurl.endswith(extensions):
return # or break or whatever
但是,一旦你決定要下載什麼網址,這是沒有困難比你的初始抓取:
page = urllib2.urlopen(absurl)
html = page.read()
path = urlparse.urlparse(absurl).path
name = os.path.basename(path)
with open(name, 'wb') as f:
f.write(html)
這就是它的主要原因。
有幾件事情你可能想要添加,但如果是這樣,你必須手動添加它們。例如:
copyfile
從page
到f
而不是read
整個事情進入記憶,然後write
出來。但這就是基礎知識。
感謝哥們,我會從那裏出發。當你從「r」到「f」說這是什麼意思。所以基本上所有文件都是我們可以編寫的內容。不要緊,如果它的MP3或PDF或ZIP。我以爲只有文本文件可以被讀寫 – user196264097 2013-05-03 23:03:27
對不起,我使用'f'作爲'urlopen'的'open'和'r'打開的本地文件(因爲這是文檔在使用時的用途不使用'f')...但我應該已經意識到,我自己的代碼稱之爲「page」而不是「r」。我會編輯它,並感謝您指出它。 – abarnert 2013-05-03 23:08:53
無論如何,是的,二進制文件仍然只是文件。 (除了在Windows上,你可能必須小心使用''wb''而不是''w'',所以Python不會試圖在文本中修改文本換行符,如果你切換到Python 3.x,二進制和文本之間的差異更有意義,但只要你使用2.x,我不想把它和你混淆)。而urllib2的全部內容是它可以讓你像處理文件一樣對待網頁。所以,真的,這只是從一個文件複製到另一個文件。 – abarnert 2013-05-03 23:10:46
您可以使用Python請求庫爲你問的問題:http://www.python-requests.org
您可以從網址保存文件是這樣的:
import requests
url='http://i.stack.imgur.com/0LJdh.jpg'
data=requests.get(url).content
filename="image.jpg"
with open(filename, 'wb') as f:
f.write(data)
這將真正幫助,如果你向我們展示你所代碼已經建成,得到的初始頁面,並拉出'href's ... – abarnert 2013-05-03 22:33:20
此外,這是一個好主意名單列表'列表'。這就是'list'類型和構造函數的名稱,如果給變量賦予相同的名稱,則不能再使用它。 – abarnert 2013-05-03 22:35:18
我更新了代碼 – user196264097 2013-05-03 22:42:22