Python 做爬虫对网页上的表格进行转存 Mysql,有什么好用的轮子值得推荐?
我是在想,是否有什么现成的轮子,直接把页面上的表格,像是几何视觉光投影那样,直接照到下面的纸( Mysql )上成型(不必完美,至少都已经进了 mysql,后期修正这些也好做),不用把时间耗在研究 html 代码上,对 td,tr 去历遍,挑选读值…
或者我这种思维是不对的
大家使用爬虫对表格进行处理,有何高招经验?
Python 做爬虫对网页上的表格进行转存 Mysql,有什么好用的轮子值得推荐?
pandas
读取:pd.read_html
保存:df.to_csv 或者 df.to_sql
对于爬虫处理网页表格并存入MySQL,我推荐 pandas + sqlalchemy 这个组合,再配合 requests 或 selenium 来抓取。下面是一个完整的例子:
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 字符串让它解析,一行出结果
表格的标签很明显,写一个针对此情况的通用爬虫不难
爬虫其实没有什么一定之规,都是用最省事儿的方案实现了再说,因为人家页面没准过两天就改版了。
更不要说有反爬虫的方案了。
代码是这样吗:pd.read_html(‘http://data.eastmoney.com/stock/tradedetail/2019-01-30.html’),我怎么得到的是一个空列表
powerbi


