基于Python+BeautifulSoup实现ABS站点Table5 Excel自动下载转DataFrame
解决方法
我们可以通过匹配链接特征的方式精准筛选Table 5的Excel下载地址,核心筛选逻辑基于ABS页面的稳定规则:
- Table 5对应的下载链接后缀为
.xlsx格式 - 对应下载链接的文本描述一定包含
Table 5关键词 - 页面内的下载链接为相对路径,需要拼接ABS域名补全为完整可访问地址
完整可运行代码
#####Step 1: 导入所需依赖包##### import requests import pandas as pd from bs4 import BeautifulSoup #####Step 2: 请求目标页面##### url = 'https://www.abs.gov.au/statistics/labour/earnings-and-work-hours/weekly-payroll-jobs-and-wages-australia/latest-release' response = requests.get(url) # 校验请求是否成功 if response.status_code != 200: raise ConnectionError("页面请求失败,请检查网络或地址是否有效") #####Step 3: 解析页面内容##### soup = BeautifulSoup(response.text, 'html.parser') base_url = "https://www.abs.gov.au" table5_download_url = None #####Step 4: 筛选Table 5的Excel下载链接##### for link_tag in soup.find_all('a'): href = link_tag.get('href') link_text = link_tag.get_text(strip=True) # 同时满足三个条件:非空链接、xlsx格式、文本包含Table 5 if href and href.endswith('.xlsx') and 'Table 5' in link_text: # 补全相对路径为完整地址 table5_download_url = href if href.startswith('http') else base_url + href break if not table5_download_url: raise ValueError("未匹配到Table 5对应的Excel文件,请检查页面规则是否变更") #####Step 5: 读取数据到DataFrame##### ws = pd.read_excel(table5_download_url, sheet_name='Payroll jobs index-SA4', skiprows=5)
注意事项
如果后续ABS调整了页面规则,只需要对应修改匹配条件即可:
- 若Table 5的命名表述变更,调整
'Table 5'的匹配关键词 - 若目标工作表名称、表头行数变更,修改
pd.read_excel的对应参数即可
内容的提问来源于stack exchange,提问作者Harshik Dinesh
相关产品推荐
相关产品推荐

