Azure RBAC资源提供方操作页面表格爬取及CSV导出问题求助
Azure RBAC资源提供方操作页面表格爬取及CSV导出问题求助
嘿,我看你在爬取Azure RBAC资源提供方操作页面的表格并导出为CSV时碰到了两个头疼的问题——只能拿到页面末尾的少量表格,而且导出的内容还不是正确的CSV格式。这就来帮你捋清楚问题出在哪,再给你调整好的解决方案!
问题根源分析
- 动态内容没被正确抓取:你代码里同时用了Selenium和requests,但实际解析页面时用的是
requests.get(url)返回的静态页面内容,而Selenium打开浏览器加载的动态页面完全没派上用场。那个Azure文档页面的表格大概率是通过JavaScript动态渲染的,静态请求根本拿不到完整内容,这就是你只能看到末尾少数表格的原因。 - 表格解析逻辑错误:你直接把BeautifulSoup的
table对象写入CSV,这显然不对——CSV需要的是结构化的文本行,你得先遍历表格里的每一行、每个单元格,提取出文本内容再整理成CSV的行格式。
修正后的完整代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup import csv import time # 配置Chrome无头模式 chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--disable-gpu") # 初始化浏览器并加载页面 url = "https://learn.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations" driver = webdriver.Chrome(options=chrome_options) driver.get(url) # 等待页面完全加载(给JS留足渲染所有表格的时间,可根据网络情况调整) time.sleep(3) # 用Selenium加载完成后的页面源码来解析 soup = BeautifulSoup(driver.page_source, 'html.parser') driver.quit() # 用完浏览器记得关闭,释放资源 # 找到页面中所有的表格 tables = soup.find_all("table") # 写入CSV文件 with open('azure_rbac_operations.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile, quoting=csv.QUOTE_ALL) for table in tables: # 遍历当前表格的每一行 for row in table.find_all("tr"): # 提取该行每个单元格的文本,自动去除多余的空格和换行 cells = [cell.get_text(strip=True) for cell in row.find_all(["td", "th"])] # 将整理好的单元格内容写入CSV的一行 writer.writerow(cells) print("所有表格已成功导出为CSV文件!")
代码调整说明
- 改用Selenium渲染后的页面内容:放弃静态的
requests.get,直接用driver.page_source获取Selenium加载完成的完整页面,确保所有动态渲染的表格都能被抓取到。 - 增加页面等待时间:用
time.sleep(3)给页面的JavaScript留足渲染所有表格的时间,如果你的网络较慢,可以适当延长这个时长。 - 正确解析表格为CSV行:遍历每个表格的每一行(
<tr>标签),再提取每行里的表头单元格(<th>)和数据单元格(<td>)的文本内容,整理成列表后再写入CSV,这样导出的就是标准的CSV格式了。 - 优化编码与资源释放:指定
encoding='utf-8'避免导出时出现中文乱码,用完浏览器后调用driver.quit()及时释放系统资源。
备注:内容来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

