2021-01-11 如何将网页中的 table 数据导入到 自家的 数据库(例如mysql 等等,你当然可以用其他的数据库)

目标:爬取锦宏高考网站的大学信息

1. 对于网页中的 table 数据较多页数  时, 通常地址是按  递增 的 方式 也就是,通常+1 等,举个栗子:

这个高考信息 网站,列举了大学的 名字,特色,学历层次等等,看这个网站的地址 是这样的:

http://www.jhgk.cn/findCollege.htm?strCurrentPage=1&pCityId=-1&type=

发现没有 strCurrentPage=1 这个1  就是当前的页码,我们是 通过 鼠标 按下   下一页   这按钮  总结出来的,

其他的  网页 类似。

 

2. 用python 代码 将 该网页的 数据,转成文本类型, 在这里我们转成 .csv ,(你如果要问为什么)等下给你回答。

请看下面的 代码:

import pandas as pd
import time
result  = None
for i in range(1,207):
    temp = str(i)
    url = 'http://www.jhgk.cn/findCollege.htm?strCurrentPage='+ temp + '&pCityId=-1&type=&keyWord='
    tables = pd.read_html(url)
    df2 = tables[1]
    if result is None:
        result = df2
    else:
        result = result.append(df2)
    time.sleep(1)
    print('-----------------')
result
result.to_csv('Result.csv')

 

参考 链接:

史上最简单的爬虫:使用python快速获取web网页中的table数据

这博客中:

 

3. 得到我们的 .csv 文件后,就可以加入到 mysql 数据库啦,详情请看我们的代码操作,代码出处忘记了,下次找到必贴,谢谢!如有侵犯作者权利,请联系我删除。


import pymysql
import os
import pandas as pd

pd.set_option('expand_frame_repr', False)
pd.set_option('display.max_columns', None)
pd.set_option('colheader_justify', 'centre')

try:
    conn = pymysql.connect(host='localhost', user='root', password='123456', db='gaokao', charset='utf8')
    cur = conn.cursor()
    print('database connect successful')
except:
    print('database connect failed')

os.chdir('/home/work/work/college/')#去到这个文件夹下找.csv 文件,可以有多个
path = os.getcwd()
files = os.listdir(path)

i = 0
for file in files:
    if file.split('.')[-1] in ['csv']:
        i += 1
        filename = file.split('.')[0]
        print('name : ' + filename)
        filename = 'college_table' + filename
        f = pd.read_csv(file)  #
        columns = f.columns.tolist()

        types = f.dtypes
        field = []
        table = []
        char = []
        for item in range(len(columns)):
            if 'object' == str(types[item]):
                char = '`' + columns[item] + '`' + ' VARCHAR(255)'
            elif 'int64' == str(types[item]):
                char = '`' + columns[item] + '`' + ' INT'
            elif 'float64' == str(types[item]):
                char = '`' + columns[item] + '`' + ' FLOAT'
            elif 'datetime64[ns]' == str(types[item]):
                char = '`' + columns[item] + '`' + ' DATETIME'
            else:
                char = '`' + columns[item] + '`' + ' VARCHAR(255)'
            table.append(char)
            field.append('`' + columns[item] + '`')

        tables = ','.join(table)
        fields = ','.join(field)

        cur.execute('drop table if exists {};'.format(filename))
        conn.commit()


        table_sql = 'CREATE TABLE IF NOT EXISTS ' + filename + '(' + 'id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,' + tables + ');'

        print('table_sql: ' + table_sql)
        cur.execute(table_sql)
        conn.commit()



        f_sql = f.astype(object).where(pd.notnull(f), None)
        values = f_sql.values.tolist()
        s = ','.join(['%s' for _ in range(len(f.columns))])
        insert_sql = 'insert into {}({}) values({})'.format(filename,fields,s)
        cur.executemany(insert_sql, values)
        conn.commit()

        print(' ')
cur.close()
conn.close()

可以将 我的文件夹路径替换即可,(当然,你的数据库密码,名称根据你自己的去更改咯)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Teleger

你的支持是我前进的方向

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值