gpt4 book ai didi

python - 如何使用 python 和 BeautifulSoup 从网站下载 .qrs 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:40 32 4
gpt4 key购买 nike

我想下载所有以 .qrs、.dat、.hea 结尾的文件,并将它们存储到本网站的本地文件夹中。

https://physionet.org/physiobank/database/shareedb/

我尝试从以下链接修改解决方案。

Download .xls files from a webpage using Python and BeautifulSoup

这是我修改代码的方式:

import os
from bs4 import BeautifulSoup
# Python 3.x
from urllib.request import urlopen, urlretrieve

URL = 'https://physionet.org/physiobank/database/shareedb/'
OUTPUT_DIR = '' # path to output folder, '.' or '' uses current folder

u = urlopen(URL)
try:
html = u.read().decode('utf-8')
finally:
u.close()

soup = BeautifulSoup(html, "html.parser")
for link in soup.select('a[href^="https://"]'): # or a[href*="shareedb/0"]
href = link.get('href')
if not any(href.endswith(x) for x in ['.dat','.hea','.qrs']):
continue

filename = os.path.join(OUTPUT_DIR, href.rsplit('/', 1)[-1])

# We need a https:// URL for this site
# href = href.replace('http://','https://')

print("Downloading %s to %s..." % (href, filename) )
urlretrieve(href, filename)
print("Done.")

当我运行这段代码时,它不会从目标页面提取文件,也不会输出任何失败消息(例如“下载失败”)。

经过一些调试后,我发现在我的例子中没有选择文件。我怀疑它与 html 的结构有关。

如何使用 Python 将这些文件下载到本地目录?

最佳答案

您可以使用出色的 requests库如下:

import bs4            
import requests

url = "https://physionet.org/physiobank/database/shareedb/"
html = requests.get(url)
soup = bs4.BeautifulSoup(html.text, "html.parser")

for link in soup.find_all('a', href=True):
href = link['href']

if any(href.endswith(x) for x in ['.dat','.hea','.qrs']):
print "Downloading '{}'".format(href)
remote_file = requests.get(url + href)

with open(href, 'wb') as f:
for chunk in remote_file.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)

这会将所有 .dat.hea.qrs 文件下载到您的计算机。

使用标准安装:

pip install requests

请注意,该 URL 上的所有 href 已经采用适合直接用作文件名的形式(因此目前不需要解析任何 / 字符)。

关于python - 如何使用 python 和 BeautifulSoup 从网站下载 .qrs 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160252/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com