使用Python错误从web下载所有文件
我正在尝试从该网站下载所有文件 我在一个页面上找到了这段代码,我正在尝试将其适应我的流程 如果你能帮助我,我将不胜感激使用Python错误从web下载所有文件,python,html,python-3.x,Python,Html,Python 3.x,我正在尝试从该网站下载所有文件 我在一个页面上找到了这段代码,我正在尝试将其适应我的流程 如果你能帮助我,我将不胜感激 #Aqui importe las librerias import requests from bs4 import BeautifulSoup # specify the URL of the archive here archive_url = "https://www.superbancos.gob.pa/es/fin-y-est/repo
#Aqui importe las librerias
import requests
from bs4 import BeautifulSoup
# specify the URL of the archive here
archive_url = "https://www.superbancos.gob.pa/es/fin-y-est/reportes-estadisticos"
def get_video_links():
r = requests.get(archive_url)
soup = BeautifulSoup(r.content,'html5lib')
links = soup.findAll('a')
video_links = [archive_url + link['href'] for link in links if link['href'].endswith('xlsx')]
return video_links
def download_video_series(video_links):
for link in video_links:
'''iterate through all links in video_links
and download them one by one'''
# obtain filename by splitting url and getting
# last string
file_name = link.split('/')[-1]
print ("Downloading file:{!s}".format(file_name))
# create response object
r = requests.get(link, stream = True)
# download started
with open(file_name, 'wb') as f:
for chunk in r.iter_content(chunk_size = 1024*1024):
if chunk:
f.write(chunk)
print ("{!s} downloaded!\n".format(file_name))
print ("All files downloaded!")
return
if __name__ == "__main__":
video_links = get_video_links()
download_video_series(video_links)
但是当我启动程序时,他说所有文件都下载了,任何人都不下载。这里的问题是页面需要javascript。您最好使用selenium webdriver来处理此问题,而不是使用bs4:
这里的问题是页面需要javascript。您最好使用selenium webdriver来处理此问题,而不是使用bs4:
您要查找的信息是用JS代码动态加载的。因此,您应该使用能够运行JS并呈现页面的东西,就像您在浏览器中看到的那样 最直接的方法是使用selenium:
from bs4 import BeautifulSoup
from selenium import webdriver
def get_soup(link):
driver = webdriver.Chrome()
driver.get(link)
soup = BeautifulSoup(driver.page_source, 'html5lib')
driver.close()
return soup
所以你的第一个函数可以重写为
def get_video_links():
soup = get_soup(archive_url)
links = soup.findAll('a')
video_links = [archive_url + link['href'] for link in links if link['href'].endswith('xlsx')]
return video_links
只需确保正确设置您的ChromeDriver!下面是一个示例。您正在查找的信息是用JS代码动态加载的。因此,您应该使用能够运行JS并呈现页面的东西,就像您在浏览器中看到的那样 最直接的方法是使用selenium:
from bs4 import BeautifulSoup
from selenium import webdriver
def get_soup(link):
driver = webdriver.Chrome()
driver.get(link)
soup = BeautifulSoup(driver.page_source, 'html5lib')
driver.close()
return soup
所以你的第一个函数可以重写为
def get_video_links():
soup = get_soup(archive_url)
links = soup.findAll('a')
video_links = [archive_url + link['href'] for link in links if link['href'].endswith('xlsx')]
return video_links
只需确保正确设置您的ChromeDriver!这是。
print(r.content)
告诉我你没有得到正确的内容。你应该检查这部分archive\u url+链接['href']
,因为href
本身的链接已经是一个完整的urlprint(r.content)
告诉我你没有得到正确的内容。你应该检查这部分archive\u url+链接['href']
因为href
本身的链接已经是一个完整的URL了我了解bro,我是编码新手,我安装了selenium并导入到我的python中,我可以修改此代码以与selenium一起使用吗?还是我必须从头开始制作一个?非常感谢您的帮助您可能至少可以修改代码的逻辑如何获得链接s、 你需要学习selenium的基础知识,才能让它像你所希望的那样工作。我的建议是,你首先开始设置它并加载页面,然后获取你所需要的所有元素。这里是一个起点:我了解兄弟,我是编码新手,我安装了selenium并导入到我的python中,我可以将此代码改编为与selenium一起使用吗ium或我必须从头开始制作一个吗?非常感谢您的帮助,您可能可以修改代码,至少可以修改获取链接的逻辑。您需要学习selenium的基础知识,才能让它按照您的意愿工作。我的建议是,您首先开始设置并加载页面,然后获取所需的所有元素。下面是一个示例起点:非常感谢您的帮助,我现在有了这个代码,它似乎可以工作,但我得到了一个错误非常感谢您的帮助,我现在有了这个代码,它似乎可以工作,但我得到了一个错误