不说废话直接上代码 ,看代码分析 在代码里我写了详细的 注释!!!
# 导入所需库
import requests
from bs4 import BeautifulSoup
import mysql.connector
from mysql.connector import Error
# MySQL数据库配置
db_config = {
'host': '127.0.0.1', # 数据库主机地址
'user': 'root', # 数据库用户名
'password': '1016', # 数据库用户密码
'database': 'test1' # 要连接的数据库名
}
def store_table_data_in_mysql(data_list, column_count):
connection = None
try:
connection = mysql.connector.connect(**db_config)
if connection.is_connected():
db_info = connection.get_server_info()
print(f"已连接到MySQL服务器版本 {db_info}")
cursor = connection.cursor()
# 修改表名为Clay13
create_table_sql = f"""
CREATE TABLE IF NOT EXISTS Clay13(
id INT AUTO_INCREMENT PRIMARY KEY,
{', '.join(['column{}'.format(i+1) + ' VARCHAR(255)' for i in range(column_count)])}
)
"""
cursor.execute(create_table_sql)
connection.commit()
# 更新插入数据的表名为Clay13
placeholders = ', '.join(['%s'] * column_count)
insert_sql = f"INSERT INTO Clay13 ({', '.join(['column{}'.format(i+1) for i in range(column_count)])}) VALUES ({placeholders})"
for item in data_list:
cursor.execute(insert_sql, item)
connection.commit()
print("数据插入成功")
else:
print("无法连接到MySQL服务器")
except Error as e:
print(f"发生错误:'{e}'")
finally:
if connection is not None and connection.is_connected():
cursor.close()
connection.close()
print("MySQL连接已关闭")
# 目标网页URL
url = "https://yjsc.xjnu.edu.cn/2023/0919/c419a126195/page.htm"
# 发送HTTP请求获取网页内容
response = requests.get(url)
try:
# 解码响应内容
content = response.content.decode('utf-8')
except UnicodeDecodeError:
print("解码错误,尝试使用其他编码")
else:
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(content, 'html.parser')
# 查找tbody标签
tbody = soup.find('tbody')
# 如果找到了tbody,进一步提取表格数据
if tbody:
rows = tbody.find_all('tr') # 找到所有行
data_to_store = [] # 创建数据列表用于存储表格数据
column_count = 0 # 计算表格的列数
# 遍历每一行,提取并清理单元格文本
for row in rows:
cells = row.find_all('td') # 找到该行中的所有单元格
# 根据实际列数调整下面的代码
column_count = max(column_count, len(cells))
row_data = ['' if cell is None else cell.get_text(strip=True) for cell in cells]
data_to_store.append(row_data)
# 存储数据到MySQL
store_table_data_in_mysql(data_to_store, column_count)
else:
print("没有找到tbody标签")
# 注意:上述代码中的`store_table_data_in_mysql`函数和数据插入部分假设了一个具体的表结构。
# 你需要根据实际表格的列数和数据类型调整`CREATE TABLE`语句和`INSERT INTO`语句中的字段定义及占位符。