一个,明白

我最近进入股票市场。我只是觉得自己已经长很多,但是韭菜仍然被残酷地收获。所以我考虑了一下。让我们看看所有股票数据的资金。趋势,类似于Dragon Tiger Board股票代码,但跨度更大。

我查看了Internet上的一些资源,发现我没有想要的东西。最好的文件被分成多个文件,没有对应的股票代码,所以我制作了EXCEL集成版本。

首先,我们从以下位置获得相应的股票:

方法1:

CTRL + C和CTRL + V是我们通常所说的CV工程师,将它们复制到EXCEL,然后执行数据处理,清理它们并将它们放在TXT中,以准备以下股票信息。

方法2:

多次从此网页元素中获取股票代码,发现股票代码尚未完全爬网。可以推断出网页可能是异步加载的,这意味着在不滚动网页的情况下数据获取是不完整的。是的,因此您需要使用Python。使用selenium + webdriver爬网动态网页的内容。本文已经写得很详细。

如果您想了解从相关静态网页中获取数据的方法和解析过程,可以查看代码以及对Python进行爬网的详细分析,该爬虫是我之前写的百度搜索的标题和真实URL的

获取股票的代码如下:

from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
import csv
import os
file=r'C:\Users\xxp\.spyder-py3\testcode\test\stock_data.csv'#生成文件路径
def data_write_csv(file, datas):#file为写入CSV文件的路径,datas为要写入数据列表
    with open(file,'a+',encoding='utf-8-sig',newline='') as f:
        writer  = csv.writer(f)
        for data in datas:
            writer.writerow(data)
    print("保存文件成功,处理结束")
def get_info():
    total_title=[]
    total_content=[]
    total_info=[]
    url = 'http://quote.eastmoney.com/stock_list.html'
    #r = s.get(url=url)
    #r.encoding = 'GBK'
    driver = webdriver.Chrome()
    r = driver.get(url)
    
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    #print(soup)
    for n in range(0,7500,2500):
        driver.execute_script('window.scrollBy(0,'+ str(n) +')')#进行页面翻滚
        for so in soup.select('#quotesearch ul a'):
            #print(so)
            g_title = so.get('href')
            #print(g_title)
            #print(g_title)
            g_content=so.get_text().strip()#根据分析标题无对应标签 只能获取标签内文字 去掉换行和空格
            #print(g_content)
            #print(g_title,g_content)
            total_title +=[g_title]
            total_content +=[g_content] 
        # print (total_title)
        # print (total_content)
        total_info=zip(total_title,total_content)#合并
        print (total_info)
        if os.path.exists(file): #文件检测 
            data_write_csv(file,total_info)# 进行excel写入
                         
        else: #文件不存在就创建
            df=pd.DataFrame(data=total_info,columns=['title','内容'])
            df.to_csv(file,index=False,encoding='utf_8_sig')
            print ('文件创建成功')
if __name__ == '__main__':
        get_info()

由于网页的修改,上部代码无效,以下部为准。以下网址删除了一些无用的数据

import requests
import pandas as pd
import time
import json
import os	
import csv
import numpy as np
file=r'D:\Users\xinpengxu\Desktop\stock_data.csv'#生成文件路径
filename=r'D:\Users\xinpengxu\Desktop'
def get_json(url):  # 获取JSON
    try:
        r=requests.get(url)  # 抓取网页返回json信息
        r.raise_for_status()
        r.encoding = 'utf-8'
        #print(r.json())
        #with open(r"C:\Users\xxp\.spyder-py3\testcode\tmp.txt", "w") as fp:
            #fp.write(json.dumps(r.json(),indent=4,ensure_ascii=False)) # txt测试是否成功获取网页
        return r.json()
    except:
        return 'false'
          
def get_stock_info(result):  # 获取某个股票的信息 result 为dict类型
        items_all=[]
        items_finish=[]
        #"序号	代码	名称	相关链接	最新价	涨跌幅	涨跌额	成交量(手)	成交额	振幅	最高	最低	今开	昨收	量比	换手率	市盈率(动态)	市净率\n"
        all_name= result.get("data").get("diff") #list类型
        for i in range(0,len(all_name)-1): #数组长度限定30交易日内数据
           item = all_name[i] #获取数据 dict类型
           items_all+=[item['f12'],item['f14']]
           
        for i in range(0, len(items_all), 2):#转成二维数组
            items_finish.append(items_all[i:i+2])   
        #print(items_finish[1])
        #下述注释部分为方法二 也可以取得数据 方法主要是为了后续我做数据库存写操作方便些
        # if os.path.exists(filename):#文件路径检测
        #     #print("path exists")
        #     df=pd.DataFrame(data=all_name,columns=['f12','f14'])
        #     df['f12'] = '#' + df['f12'] #防止0在保存时候被去除
        #     df.to_csv(file,index=False,encoding='utf_8_sig')
        #     print ('文件创建成功')
        # else:
        #     os.makedirs(filename)
        #     print('create path success')
        # return ''
        if os.path.exists(filename):#文件路径检测
            #print("path exists")
            df=pd.DataFrame(data=items_finish,columns=['code','name'])
            df['code'] = '#' + df['code'] #防止0在保存时候被去除
            df.to_csv(file,index=False,encoding='utf_8_sig')
            print ('文件创建成功')
        else:
            os.makedirs(filename)
            print('create path success')
        return ''
   
   
def main():
    url = 'http://31.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152'# 1591683995 为时间戳 
    #此部分url删减了部分不需要的内容
    stock_info=get_json(url)#获取json数据
    #print(stock_info)
    get_stock_info(stock_info)#对数据进行处理
    
    
if __name__=='__main__': #在其他文件import这个py文件时,不会自动运行主函数
    main()

生成数据后,执行数据清理(在excel中,手动进行重复数据删除,按列排序以获得代码很好),执行重复数据删除,按列排序两次。

俩次分列

后续数据替换的原因与下一篇文章中使用的股票代码数据有关。将sz替换为0.,将sh替换为1.。将其另存为txt文件股票代码,将在第二篇文章中使用。相关股票代码个数据

后续处理

后续文章:Python获取所有股票代码和股票历史交易数据分析(二)