按照图片上的提示操作就行
上图这里的这个网址才是我们须要的

要求头中的内容,方框中的在这儿用就行,有的网站还须要带上cookie,灵巧节制吧
我们把这个网址复制下来,个中几个紧张的参数已经在上图中解释了,其它的参数不动就行,也可以删减部分不须要的,比如LB、WB之类的
url = 'http://quotes.money.163.com/hs/service/diyrank.php?host=http://quotes.money.163.com/hs/service/diyrank.php&page=0&query=PLATE_IDS:hy009000&fields=NO,SYMBOL,NAME,PRICE,PERCENT,UPDOWN,FIVE_MINUTE,OPEN,YESTCLOSE,HIGH,LOW,VOLUME,TURNOVER,HS,LB,WB,ZF,PE,MCAP,TCAP,MFSUM,MFRATIO.MFRATIO2,MFRATIO.MFRATIO10,SNAME,CODE,ANNOUNMT,UVSNEWS&sort=PERCENT&order=desc&count=24&type=query'headers = { 'Host': 'quotes.money.163.com', 'Referer': 'http://quotes.money.163.com/old/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'}html = requests.get(url=url, headers=headers)datas = html.json()
在用get要求数据时一定要带上headers这个参数,无论网站是否须要,都要养成这个好习气,如果你直接就一个URL,有点一丝不挂赤裸着向别人借东西的觉得,不仅玷污了人家的眼睛,也轻渎了自己,尊重很主要!
设想一下,假如有一人骑个破自行车用力撞开你家大门,并大喊一声“我来了!
”,你心里是啥觉得?
要求头的格式基本都是这样子(在selenium中不是这种格式),由于返回给我们的是json格式的数据,以是在用datas吸收时后面要加上json(),如果是字符串类型的是text
# 把得到的数据统一添加到列表中content = []# 提取列表中的数据,当然也可以用jsonpathfor data in datas['list'][:10]: name = data['NAME'] percent = round(data['PERCENT']100,2) # 由于原始数据中是浮点类型 content.append(name + '\t' + str(percent) + '\t') print(name, percent)
由于我们得到的是json数据,便是字典+列表,相互嵌套的,信息技能版块共有398支股票
,而我们只须要前后10个,以是在这儿用了[:10],这是python中切片式取值的方法,意思是取前10个数;字典的取值方法是key:value格式,这里我们只取其名称和涨跌幅,以是就data['NAME']和round(data['PERCENT']100,2),round是向上取值的意思,第二个参数是决定留下几位小数,由于返回的数据是0.xxxxxx的浮点类型数据,正常咱们都是按百分比看的,以是100,这一句代码便是为了符合我们日常的习气;结果如下:
南凌科技 19.99初灵信息 19.98吴通控股 19.95兆日科技 16.15ST邦讯 12.7赢时胜 12.56中嘉博创 10.12德生科技 10.03深南股份 10.0生 意 宝 9.98
添加到content列表中是如下的内容:
['南凌科技\t19.99\t', '初灵信息\t19.98\t', '吴通控股\t19.95\t', '兆日科技\t16.15\t', 'ST邦讯\t12.7\t', '赢时胜\t12.56\t', '中嘉博创\t10.12\t', '德生科技\t10.03\t', '深南股份\t10.0\t', '生 意 宝\t9.98\t']
至此已经基本上完成了数据的准备事情,下面便是要保存到文件中,由于我们只须要上涨和下跌前十名的数据,怎么获取这个数据呢?有的同学说全部下载保存后取末了10个,这样也可以,不过有点摧残浪费蹂躏,由于我们统共只须要前后共20条的数据,全部保存要17页398条数据(你也可以自己试着全部保存下来,当作练习了),为了减省节约,再说网易是一个有良心的网站,给我们供应理解决这个问题的路子,便是在网址中那个卖力升降的order,你自己试试看能否创造?下面我们开始布局办理这个问题的办法,如果你有了更好的方法请一定要留言见告我哟¶
# 我们在这儿封装一个函数,这样做的好处是便于批量处理数据,也有利于我们自己管理代码def parse_data(link, spe): html = requests.get(url=link, headers=headers)# 这一句的意思是随机在0.5--1.2秒之间取值,在向做事器发送要求时的停息韶光,防止反爬 time.sleep(random.uniform(0.5, 1.2)) datas = html.json()# 这一句是提取返回的数据中的日期,方便我们在保存文件时写入文件名 datetime = datas['time'].split(' ')[0] content = [] for data in datas['list'][:10]: name = data['NAME'] percent = round(data['PERCENT']100, 2) # 紧张是str(percent),由于Python中不许可字符串+数值稠浊,以是把浮点类型的转换成字符串类型 content.append(name + '\t' + str(percent) + '\t') # 为了方便保存在这儿也给文件名构建一个字典 title = {'desc':f'{datetime}涨幅前十.csv', 'asc': f'{datetime}跌幅前十.csv'} # 保存数据到本地 with open(title[spe], mode='w', encoding='utf-8') as f: f.write(''.join(content)) print(title[spe])# 创建一个字典,办理涨跌前十的问题,dese是降序,是涨幅在前,asc是跌幅在前order = {1:'desc',2:'asc'}# 通过循环,先取涨幅前十名,再取跌幅前十名的数据for num in range(1, 3): spe = order[num]# 由于网址中间有变量,以是在前面用了f来格式化,也可以在网址后面写成.format(spe) base_url = f'http://quotes.money.163.com/hs/service/diyrank.php?host=http://quotes.money.163.com/hs/service/diyrank.php&page=0&query=PLATE_IDS:hy009000&fields=NO,SYMBOL,NAME,PRICE,PERCENT,UPDOWN,FIVE_MINUTE,OPEN,YESTCLOSE,HIGH,LOW,VOLUME,TURNOVER,HS,LB,WB,ZF,PE,MCAP,TCAP,MFSUM,MFRATIO.MFRATIO2,MFRATIO.MFRATIO10,SNAME,CODE,ANNOUNMT,UVSNEWS&sort=PERCENT&order={spe}&count=24&type=query' # 启动函数,并传入两个变量,这里link=base_url,spe=speparse_data(base_url,spe)# 结果2022-02-03涨幅前十.csv2022-02-03跌幅前十.csv
我们把获取数据的代码封装成一个函数后,有心的你大概创造原来用不了几行代码;第一篇数据的获取到此就结束了,俗话说,授人以鱼不如授人以渔,方法和过程都有了,随下来时可以练习一下,如果想把全部行业或者沪深两市4000多支的股票当日的数据保存到本地怎么办呢?留言见告我你的思路吧;下一篇先容下pandas处理数据的一些日常操作,学会就可以高效的处理事情中的90%旁边的问题;有些同学可能会说,事情中会EXCEL就行了,这么说也对,但也不全对,由于excel在处理100行几列以内的数据时还可应对,数据量也大,比如几千行以上,就不说数十万行了,电脑配置一样平常的话能气去世你,条件还须要你会数组和VBA,如果你只会正常的几个普通函数,如vlookup、sum、rank等等,只能说刚入门excel,pandas比excel强的可不是一星半点,详细的下篇细说。