做回测系统发现股票季报不能很好的表现每天的总股本。于是在新浪发现了数据源,决定用beatifulSoup爬一下。
先是读取股票code对应页面,
1 code = yahooCode[0][:6] 2 html = urlopen("http://money.finance.sina.com.cn/corp/go.php/vCI_StockStructureHistory/stockid/"+str(code)+"/stocktype/TotalStock.phtml") 3 bsObj = BeautifulSoup(html, "lxml")
这里推荐用下面这种,因为用lxml会有几个code的页面解析不到,具体原因可能是页面太长。
bsObj = BeautifulSoup(html, "html.parser",from_encoding="gb18030")
下面直接找id的话用find(id=xxx)就行。
得到的数据就像dom结构一样。可以用find或者findAll查找子tag,例如下面,区别在于匹配第一个和匹配全部。
最后得到数据插入mysql,推荐replace into好用的很。
table = bsObj.find(id="StockStructureHistoryTable") subtable = table.findAll(width="100%") #print(subtable) divs = subtable[0].findAll("div", {"align":"center"}) try: for div in divs: if(index==0): chgDate = div.string if(index==1): totalShares = float(div.string[:-2]) rows = cur.fetchall() insertSql = "REPLACE into TotalShares (ticker,chgDate,totalShares) values (%s,%s,%s)" cur.execute(insertSql,[yahooCode[0],chgDate,totalShares]) print("insert :"+str([code,chgDate,totalShares])) index = (index+1) % 2 except Exception: print("wrong code info:"+code+":"+traceback.format_exc())
时间: 2024-10-13 11:27:46