我是第一次使用網頁抓取和美麗的湯。
我有兩個查詢首先將登錄資訊傳遞給我要下載的檔案,其次下載多個 zip 檔案。我在下面粘貼我的代碼,但沒有 curl/登錄資訊。
首先,我有一個需要登錄才能下載檔案的網頁。我可以使用 Beautiful Soup 登錄,但此后我無法更進一步,因為我無法將 python 中的登錄資訊傳遞給我想要下載的特定檔案。所以基本上我怎樣才能讓python知道使用file= baseurl href_link檔案的登錄憑據。
其次,我的鏈接檔案是一個 zip 檔案,末尾沒有 .zip。例如我的 baseurl= 'https://consumerpyramidsdx.cmie.com'和 href_link 檔案/kommon/bin/sr.php? kall=wsubsdl&fn=consumption_pyramids_20140131_MS_rev&fmt=csv&rrurl=consumptionpyramidsdx那么我如何使用它下載所有的 zip 檔案并解壓呢?大多數關于此的論壇查詢都明確使用“.zip”,因為他們的 href 具有 .zip,但在我的情況下它沒有。
單擊 href_link 后下載的示例 zip 檔案是下載的示例 zip 檔案名是“consumption_pyramids_20140131_MS_rev_csv”
我的代碼如下:
response = requests.post('https://consumerpyramidsdx.cmie.com/kommon/bin/sr.php', headers=headers, params=params, cookies=cookies, data=data)
soup = BeautifulSoup(response.content, "lxml")
baseurl= 'https://consumerpyramidsdx.cmie.com'
print(soup)
for x in soup.find_all("a"):
if x.text =='CSV':
file_link = x.get('href') #contains the href_link file I want to download
print(file_link)
# After this I want to download all the baseurl file_link files
uj5u.com熱心網友回復:
您可以一次性完成(假設您檢查了當前代碼是否有效并且正確):
for x in soup.find_all("a"):
if x.text =='CSV':
file_link = x.get('href')
response = requests.get(url=urllib.parse.urljoin(baseurl, file_link), headers=headers)
content = response.content
with zipfile.ZipFile(io.BytesIO(content)) as zf:
zf.extractall('target/directory')
uj5u.com熱心網友回復:
我的建議:
方法一
response = requests.get(url=url,headers=headers)
content = response.content
with open("xxxx.zip", "wb") as f:
f.write(content)
此網址是您將要下載的網站網址。這個 XXXX 是你的檔案名,zip 檔案。
方法二
import wget
url = ""
wget.download(url, path)
路徑是您的 zip 填充將在您的 Mac/Linux/windows 上保存的路徑。
最后但并非最不重要的一點是,在解壓縮檔案時,您可以使用 zipfile,例如:
import zipfile
zip_file = zipfile.ZipFile(path)
zip_list = zip_file.namelist() # get all files after decompressing files.
# Cycle unzip files to the specified directory。
for f in zip_list:
zip_file.extract(f, floder_abs)
zip_file.close()
感謝您的閱讀,這是我的榮幸。如果這些建議有任何問題,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370868.html
