嘿,周末ccpc网络预选赛,我就不复习,我就大晚上不睡觉刷手机,嘿你能怎么着。(在被队友打死前跑路)
实际上是刚刚写嗨了,肾上腺激素飙升,但是俺滴任务完成啦,想着刷会手机再睡,结果不小心把锁机点开了,导致我只能打开csdn,顺带更新一下今天罚坐十一小时(包含吃饭,拿快递,刷视频等等的时间)的结果。
督促我学爬虫的,不是热爱,不是机器人,而是专业课作业,是我实在不想一个个点开网页,点开,查找,比较数值。
话说回来,贵院真有你的,还开数据挖掘,还学爬虫,虽然第一节课是海龟博士手把手教如何安装python和pycharm。(顺带一提,老师高度赞许了csdn(否,原话是国内网站不熟悉,然后推荐了csdn))
哦不过和上述这门课没啥关系,只是小吐槽一下。简单描述一下作业:统计深交所各个行业的一些信息,并且统计每个行业市值前三的公司。
首先肯定要知道有什么行业,并且每个行业都有什么公司。深交所贴心的提供了各行业上市公司的信息,甚至还提供的下载。
不巧的是刚好市值得点进网页查看。那没办法,只能一个个查,然后比较、统计。
桥豆麻袋,这显然不符合本人尿性,最起码写个sort数组排个序啊。但这也太逊了吧阿伟,刚好最近发奋图强在了解爬虫,这不是个现成的例子吗?
(由于我已经在床上了,网页也打不开,我只能凭记忆回忆一下,代码后面补,专业名词说错了多多包涵,我真不看股票的,并且小半年不用python了,具体实现可能会略微复杂)
首先观察网址,后面这一串数字一看,好家伙,这不上司公司的id吗,这波不直接在行业分类里把所有的公司id都爬下来,然后一个个去查找?
但鉴于我刚学,懒,且不会。所以我选择直接下载了深交所提供的Excel文件,从里面提取。
我们这时候提取出了公司名字和id,遍历id并把它与网址融合,然后发现网站结构差不多,这波直接找到需要的元素,爬下来就行啦。(由于py只学了个皮毛,所以不太会,写的可能麻烦了,没事能用就行)
workbook = load_workbook(filename='d:/Users/asinz/Downloads/A股列表 (22).xlsx')
sheet2 = workbook.active
cells1 = sheet2["E"]
k=[]
for cell_columns in cells1:
k.append(cell_columns.value)
k.remove(k[0])
cells2 = sheet2["F"]
q=[]
for cell_columns in cells2:
q.append(cell_columns.value)
dic={}
for i in k:
dic[i]=f(i)
print(dic)
然后有笨蛋对着html找数据所在的位置找了一个晚上,最后把下载下来的html和爬出来的html做对比,发现信息消失了!
好吧我以为的爬虫的html是元素里的,实际上是index。那这波咋整?
很明显好吧,这肯定是动态元素啊,当然是去网络里找啊。
如何快速查找再哪里呢,那当然是拿着数值去搜啊
研究对应的结构,并爬下来进行筛选,存入
通过一个个查找我们找到了市值对应的key,把data爬下来,遍历到key的时候就输出,结束!
等等,我们是不是忘了还缺啥
哦对了,前三!
开个排序就好啦!
from tokenize import Double
from openpyxl import load_workbook
import requests
import locale
import time
def f(z):
time.sleep(0.5)
#1指定url
post_url = 'http://www.szse.cn/api/report/index/stockKeyIndexGeneralization?random=0.9574288098451655&secCode={}'.format(z)
print(post_url)
#2进行ua伪装。浏览器请求头中
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.27'
}
#3post请求参数处理
#4发送请求
response=requests.get(url=post_url,headers=headers)
#5获取响应数据,json()方法返回的是obj(如果确认响应数据是json类型的才可以用json返回
dic_obj=response.json()
for i in dic_obj:
if i=='data':
for j in dic_obj[i]:
for k in j:
if k=='now_sjzz':
j[k] = float(j[k].replace(',',''))
return float(j[k])
#6进行持
# 久化存储
workbook = load_workbook(filename='d:/Users/asinz/Downloads/A股列表 (22).xlsx')
sheet2 = workbook.active
cells1 = sheet2["E"]
k=[]
for cell_columns in cells1:
k.append(cell_columns.value)
k.remove(k[0])
cells2 = sheet2["F"]
q=[]
for cell_columns in cells2:
q.append(cell_columns.value)
dic={}
for i in k:
dic[i]=f(i)
print(dic)
dic=sorted(dic.items(),key=lambda x:x[1],reverse=True)
for i in range(3):
for j in range(len(k)):
if k[j]==dic[i][0]:
print(k[j],q[j+1],dic[i][1])
结束
刚好,平静了,该睡了。
---------------------9.13更新----------------
我发四,我肯定不是因为今天汇报/交作业才补的代码和图片,我只是今天才想起来没放图片(溜)
and笨蛋ccpc网络赛翻车了呜呜呜呜
顺带加了个sleep,因为ip地址被禁用了(qaq)