Python 做爬虫对网页上的表格进行转存 Mysql,有什么好用的轮子值得推荐?

我是在想,是否有什么现成的轮子,直接把页面上的表格,像是几何视觉光投影那样,直接照到下面的纸( Mysql )上成型(不必完美,至少都已经进了 mysql,后期修正这些也好做),不用把时间耗在研究 html 代码上,对 td,tr 去历遍,挑选读值…
或者我这种思维是不对的
大家使用爬虫对表格进行处理,有何高招经验?
Python 做爬虫对网页上的表格进行转存 Mysql,有什么好用的轮子值得推荐?

12 回复

pandas
读取:pd.read_html
保存:df.to_csv 或者 df.to_sql


对于爬虫处理网页表格并存入MySQL,我推荐 pandas + sqlalchemy 这个组合,再配合 requestsselenium 来抓取。下面是一个完整的例子:

import pandas as pd
import requests
from sqlalchemy import create_engine
from io import StringIO

# 1. 抓取表格数据(这里以直接读取HTML为例)
url = '你的目标网页URL'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
html_content = response.text

# 2. 用pandas提取表格(它会自动找到<table>标签)
# 返回的是DataFrame列表,通常第一个就是
tables = pd.read_html(StringIO(html_content))
df = tables[0]  # 取第一个表格,按实际情况调整

# 3. 清洗数据(按需处理)
df.columns = df.columns.str.strip()  # 清理列名空格
df = df.dropna(how='all')  # 删除全空行

# 4. 存入MySQL
engine = create_engine('mysql+pymysql://用户名:密码@主机:端口/数据库名')
df.to_sql('表名', con=engine, if_exists='replace', index=False)

print(f"成功导入 {len(df)} 行数据到MySQL")

为什么推荐这个方案:

  • pandas.read_html() 能直接解析HTML中的<table>,不用自己写解析逻辑,特别省事。
  • sqlalchemy 处理数据库连接和类型映射很稳,避免手动拼SQL。
  • 整个流程清晰,从抓取、解析到入库就十几行代码。

如果网页是JS动态加载的,把 requests 换成 selenium 就行,拿到页面源码后同样用 pd.read_html() 处理。

一句话建议:用pandas处理表格,sqlalchemy负责入库,这是最省力的路子。

以我的实践经验来看最省事的方案是

scrapy + djangoitem + django ORM + Mysql

几乎只要写很少代码(通常几十行代码)就可以把网页数据入库了。

前提是你要会 django 和 scrapy,xpath 方法精熟。

为什么不是 scrapy + sqlalchemy + mysql

你非要这么说,还可以 peewee 或直接 pymysql 啊
这不是还有一个省事儿的约束条件么

#1 卧槽,pandas 还有这种东西,666666,这效果也太好了

2 楼说的这个应该是对 html 上的表格最好的解析方式之一了,用之前爬过的一个表格页测试了一下
http://data.eastmoney.com/stock/tradedetail/2019-01-30.html,虽然这个页面是 js 生成的表格但用来测试的话挺合适的,效果如下:

丢进去 html 字符串让它解析,一行出结果

表格的标签很明显,写一个针对此情况的通用爬虫不难

我写爬虫都是自己撸。requests+parsel+sqlalchemy+mongodb。
mongodb 作为测试环境,随便搞不用担心字段问题。
然后导出 mongodb 的表,自动生成 sqlalchemy 的表。
生产环境用 mysql

爬虫其实没有什么一定之规,都是用最省事儿的方案实现了再说,因为人家页面没准过两天就改版了。
更不要说有反爬虫的方案了。

powerbi

回到顶部