使用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
本身的链接已经是一个完整的url
print(r.content)
告诉我你没有得到正确的内容。你应该检查这部分
archive\u url+链接['href']
因为
href
本身的链接已经是一个完整的URL了我了解bro,我是编码新手,我安装了selenium并导入到我的python中,我可以修改此代码以与selenium一起使用吗?还是我必须从头开始制作一个?非常感谢您的帮助您可能至少可以修改代码的逻辑如何获得链接s、 你需要学习selenium的基础知识,才能让它像你所希望的那样工作。我的建议是,你首先开始设置它并加载页面,然后获取你所需要的所有元素。这里是一个起点:我了解兄弟,我是编码新手,我安装了selenium并导入到我的python中,我可以将此代码改编为与selenium一起使用吗ium或我必须从头开始制作一个吗?非常感谢您的帮助,您可能可以修改代码,至少可以修改获取链接的逻辑。您需要学习selenium的基础知识,才能让它按照您的意愿工作。我的建议是,您首先开始设置并加载页面,然后获取所需的所有元素。下面是一个示例起点:非常感谢您的帮助,我现在有了这个代码,它似乎可以工作,但我得到了一个错误非常感谢您的帮助,我现在有了这个代码,它似乎可以工作,但我得到了一个错误