python - 使用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)
解决方案
您的网页仅包含文件夹,作为人类,您必须单击才能获取文件。
使用 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)
推荐阅读
- c++ - 如何告诉编译器优化数组访问?
- c# - 使用 NEST 进行分面搜索
- javascript - 为 jsTimezoneDetect js 库获取不同的时区 IE11 和 Chrome 浏览器
- html - 为什么这个搜索栏有这个奇怪的轮廓?- CSS
- discord.js - 如何在discord.js中一一接受多个输入
- angular - 在 AgGrid 中可观察:CellRenderer
- lua - 我的程序似乎无法识别 Lua 中的空格
- node.js - 现场分享 Nodejs 和 Visual Studio
- docker - 无法从容器的默认端口以外的任何端口(使用发布)访问 docker 容器应用程序
- amazon-web-services - 如何从 AWS RDS 下载今天日期的数据库日志文件?