首页 > 解决方案 > 使用python从url抓取和下载excel文件

问题描述

第一个问题,请放轻松。

我正在尝试使用 python 以编程方式从网站下载所有 excel 文件。我对网络抓取很陌生,所以我的代码不能满足要求 - 我已经放在下面了。当我运行脚本时,我没有看到任何输出,而且我想下载的文件也无处可寻。

不知道我做错了什么,或者我是否运行错误的脚本。我通过 anaconda navigator 运行它,使用脚本导航到目录,然后使用以下命令运行它:

python file-scraper.py

这是我的脚本的代码。任何帮助或建议表示赞赏!

from bs4 import BeautifulSoup as bs
import requests

DOMAIN = 'https://lfportal.loudoun.gov/LFPortalinternet/'
URL = 'https://lfportal.loudoun.gov/LFPortalinternet/Browse.aspx?startid=213973&row=1&dbid=0'
FILETYPE = '.xls'

def get_soup(url):
    return bs(requests.get(url).text, 'html.parser')

for link in get_soup(URL).find_all('a'):
    file_link = link.get('href')
    if FILETYPE in file_link:
        print(file_link)
        with open(link.text, 'wb') as file:
            response = requests.get(DOMAIN + file_link)
            file.write(response.content)

标签: pythonexcelweb-scrapingdownload

解决方案


您的网页仅包含文件夹,作为人类,您必须单击才能获取文件。

使用 BS,您必须获取文件夹的链接,然后请求他们获取文件列表。

简化您的案例的是文件夹和文件都具有类属性 DocumentBrowserNameLink。

你可以有一个功能来找到它们

from bs4 import BeautifulSoup as bs
import requests

DOMAIN = 'https://lfportal.loudoun.gov/LFPortalinternet/'
URL = 'https://lfportal.loudoun.gov/LFPortalinternet/Browse.aspx?startid=213973&row=1&dbid=0'
FILETYPE = '.xls'

def get_soup(url):
    return bs(requests.get(url).text, 'html.parser')

def get_links(page):
    result = page.find_all(class_="DocumentBrowserNameLink")
    return result

page = get_soup(URL)
folder_links = get_links(page)

for link in folder_links:
    page2 = get_soup(DOMAIN + link['href'])
    file_links = get_links(page2)

    for file in file_links:
        filepath = file['href']
        if FILETYPE in filepath:
            print(DOMAIN + filepath)

推荐阅读