我们老师让写一个爬虫,爬东方财富每个股票的历史流动资金,我写出来后,运行程序,前面没什么问题,到后面就有问题了
代码如下:import requests
import pandas
import json
import pymssql
import re
#获取股票资金流量网页的数据
def GetHtml(url):
html=requests.get(url)
html=html.text
return html
#对数据进行拆分
def CleanData(html):
Str_data=html[len('jQuery1830006374794149931473_1577602052640')+1:-2] #对数据进行切割
Str_data2=json.loads(Str_data)['data'] #对无用数据进行再切分获取代码和名称
print(Str_data2['code'])
code = Str_data2['code'] #股票编码
name = Str_data2['name'] #股票名称
data=[]
for i in range (len(Str_data2['klines'])):
data.append(Str_data2['klines'][i])
dealData(data,name,code)
data.clear()
Str_data2.clear()
#对拆分数据进行整理
def dealData(datalist,name,code):
#对列表中元素进行切片
new_datalist = ''.join(datalist)
new_datalist=new_datalist.split(',')
Name=name
Code=code
#将新列表放入数据库中
insertDatabase(new_datalist,Name,Code)
new_datalist.clear()
#将数据导入数据库中
def insertDatabase(datalist,Name,Code):
#对新列表数据进行分类
date=datalist[0] #时间
close_price=datalist[11] #收盘价
Quote_change=datalist[12] #涨跌幅
Main_net=datalist[1] #主力净额
Main_foce=datalist[6] #主力净占比
Over_net=datalist[5] #超大单净额
Over_foce=datalist[10] #超大单净占比
Big_net=datalist[4] #大单净额
Big_foce=datalist[9] #大单净占比
Mid_net=datalist[3] #中单净额
Mid_foce=datalist[8] #中单净占比
Sm_net=datalist[2] #小单净额
Sm_foce=datalist[7] #小单净占比
data=(Name,Code,date,close_price,Quote_change,Main_net,Main_foce,Over_net,Over_foce,Big_net,Big_foce,Mid_net,Mid_foce,Sm_net,Sm_foce)
sql="insert into Moneymove values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);"
#建立连接
conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8")
cursor = conn.cursor()
#插入测试数据
cursor.execute(sql , data)
conn.commit()
del data
conn.close()
#创建数据库
def Createdatabase():
conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8")
cursor = conn.cursor()
cursor.execute("""
create table Moneymove(
股票代码 varchar(100),
股票名称 varchar(100),
时间 varchar(100) ,
收盘价 varchar(100),
涨跌幅 varchar(100),
主流净额 varchar(100),
主流净占比 varchar(100),
超大单净额 varchar(100),
超大单净占比 varchar(100),
大单净额 varchar(100),
大单净占比 varchar(100),
中单净额 varchar(100),
中单净占比 varchar(100),
小单净额 varchar(100),
小单净占比 varchar(100)
)
""")
conn.commit()
conn.close()
#
def NeedData():
# 建立连接并获取cursor
conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8")
cursor = conn.cursor()
# 如果连接时没有设置autocommit为True的话,必须主动调用commit() 来保存更改。
conn.commit()
# 查询记录
cursor.execute('SELECT 股票代码 From SwClass$ ')
# 获取一条记录
row = cursor.fetchone()
code_list=[]
# 循环打印记录(这里只有一条,所以只打印出一条)
for i in range (3769):
if row[0] != None:
if str(row[0][0]) =='6':
code='1.'+row[0]
code_list.append(code)
else:
code = '0.'+row[0]
code_list.append(code)
row = cursor.fetchone()
return code_list
# 连接用完后记得关闭以释放资源
conn.close()
def main():
Createdatabase()
code_list=NeedData()
print(code_list)
for i in code_list:
url='http://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get?lmt=0&klt=101&secid='+ str(i)+'&fields1=f1,f2,f3,f7&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65&ut=b2884a393a59ad64002292a3e90d46a5&cb=jQuery1830006374794149931473_1577602052640&_=1577602052949'
html=GetHtml(url)
CleanData(html)
main()
出现的问题是这个:
Traceback (most recent call last):
File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 135, in
main()
File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 134, in main
CleanData(html)
File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 25, in CleanData
dealData(data,name,code)
File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 39, in dealData
insertDatabase(new_datalist,Name,Code)
File "C:/Users/VULCAN/Desktop/爬虫实习/3.py", line 65, in insertDatabase
conn = pymssql.connect(host="localhost:1433", user="sa", password="123456", database="test", charset="UTF-8")
File "src\pymssql.pyx", line 636, in pymssql.connect
File "src_mssql.pyx", line 1957, in mssql.connect
File "src_mssql.pyx", line 675, in _mssql.MSSQLConnection._init__
ValueError: list.remove(x): x not in list
请问各位大佬,这要如何解决?
我也出现了这个问题,而且是一开始都可以连接数据库,跑到后面就报错了,楼主解决了这个问题吗?