from selenium import webdriver from bs4 import BeautifulSoup import pandas as pd import time def clean_text(html_content): # 使用BeautifulSoup来解析内容,逐个元素提取文本,避免添加不必要的空格 soup = BeautifulSoup(html_content, 'html.parser') text = "" # 初始化一个空字符串用于拼接文本 for element in soup.stripped_strings: # 遍历所有文本节点,去除首尾空白 if element == "一、" or element == "二、": # 如果是列表标记,加入换行符 text += "\n" + element else: text += element # 直接拼接文本,不添加额外空格 return text.strip() # 返回处理后的文本 def fetch_data(urls): # 设置Chrome选项以在后台运行 options = webdriver.ChromeOptions() options.add_argument('headless') # 初始化WebDriver driver = webdriver.Chrome(options=options) # 初始化一个空的DataFrame,以存储最终数据 all_data = pd.DataFrame() for url in urls: # 访问页面 driver.get(url) time.sleep(3) # 等待JavaScript执行 # 获取页面源码 html = driver.page_source # 使用BeautifulSoup解析HTML soup = BeautifulSoup(html, 'html.parser') table = soup.find('table', class_='MsoNormalTable') # 如果页面上有表格 if table: rows = table.find_all('tr') temp_dict = {} for row in rows: columns = row.find_all('td') if len(columns) >= 2: # 确保每行至少有两个列(Header和Content) header = columns[0].get_text(strip=True) content_html = str(columns[1]) # 获取原始HTML内容 content = clean_text(content_html) # 清洗并去除不必要的空格 temp_dict[header] = content # 将字典转换为DataFrame,并添加到总的DataFrame中 df = pd.DataFrame([temp_dict]) all_data = pd.concat([all_data, df], ignore_index=True) # 关闭浏览器 driver.quit() return all_data # 定义要处理的URL列表 urls = [ "https://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId=1171824&itemId=4115&generaltype=9", # 可以添加更多的URL ] # 调用函数并获取数据 result_data = fetch_data(urls) # 保存到Excel文件 result_data.to_excel('output_data.xlsx', index=False)