pandas是一个数据处理模块,前面也已经提到了好些,用python写爬虫--4.5pandas存入excel.
这次来统一说一说,使用感想。
pandas主要是Seriers和Dataframe,Seriers相当于list,dataframe相当于excel表格,有行也有列。
这回主要还是说爬取下来的信息入库的问题,假如是爬取页面上的信息,像‘什么值得买’的价格信息啥的,这种就得一个个插入数据库。但是像12306返回的是json,那就用pandas整理一下入库,要方便的多。
还是举个例子。这回爬取的格力电器的历史行情。
网址:http://q.stock.sohu.com/cn/000651/lshq.shtml
要观察信息的发送情况,在时间上做更改就能看到网站的发送情况。
image.png
还是F12.
image.png
接下来就方便多了。
import requests
def getdata(code,start='20171009',end='20171130'):
url ='http://q.stock.sohu.com/hisHq?code=cn_{}&start={}&end={}&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp&r=0.625097909197931&0.266277122911587'
url1 = url.format(code,start,end)
return requests.get(url1).text
print(getdata('000567'))
可见返回的是
image.png
这不太像是一个标准的json格式,这只能用正则把有用的信息抓下来,然后转成df。
import requests
import pandas as pd
import re
from sqlalchemy import create_engine
def getdata(code,start='20171009',end='20171130'):
url ='http://q.stock.sohu.com/hisHq?code=cn_{}&start={}&end={}&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp&r=0.625097909197931&0.266277122911587'
url1 = url.format(code,start,end)
res = requests.get(url1).text
resp =re.search('{"status":0,"hq":(.*),"code"',res).group(1)
data =eval(resp)
df = pd.DataFrame(data=data)
df.columns=['date','open','close','change','changerate','high','low','vol','volnum','hsl']
df['code'] = code
con = create_engine('mysql://root:123456@localhost:3306/tushare?charset=utf8')
pd.io.sql.to_sql(df,'tick_data',con,schema='tushare',if_exists='append')
data =eval(resp)这是将str转为list,爬取下来的信息都是str,提取[]里信息,data是规整的信息,转化为dataframe比较合适。
create_engine():'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
存入库中就好了 pd.io.sql.to_sql(df,'tick_data',con,schema='tushare',if_exists='append')
df:要存入数据库的dataframe名字
'tick_data':tablename
con:前面的连接数据库信息
schema='tushare':数据库名字
if_exists='append':存在就添加,不存在就创建