目标:爬取锦宏高考网站的大学信息
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()
可以将 我的文件夹路径替换即可,(当然,你的数据库密码,名称根据你自己的去更改咯)