• python爬取深交所各行业前三上市公司市值


    嘿,周末ccpc网络预选赛,我就不复习,我就大晚上不睡觉刷手机,嘿你能怎么着。(在被队友打死前跑路)

    实际上是刚刚写嗨了,肾上腺激素飙升,但是俺滴任务完成啦,想着刷会手机再睡,结果不小心把锁机点开了,导致我只能打开csdn,顺带更新一下今天罚坐十一小时(包含吃饭,拿快递,刷视频等等的时间)的结果。

    督促我学爬虫的,不是热爱,不是机器人,而是专业课作业,是我实在不想一个个点开网页,点开,查找,比较数值。

    话说回来,贵院真有你的,还开数据挖掘,还学爬虫,虽然第一节课是海龟博士手把手教如何安装python和pycharm。(顺带一提,老师高度赞许了csdn(否,原话是国内网站不熟悉,然后推荐了csdn))

    哦不过和上述这门课没啥关系,只是小吐槽一下。简单描述一下作业:统计深交所各个行业的一些信息,并且统计每个行业市值前三的公司。

    首先肯定要知道有什么行业,并且每个行业都有什么公司。深交所贴心的提供了各行业上市公司的信息,甚至还提供的下载。

    不巧的是刚好市值得点进网页查看。那没办法,只能一个个查,然后比较、统计。

    桥豆麻袋,这显然不符合本人尿性,最起码写个sort数组排个序啊。但这也太逊了吧阿伟,刚好最近发奋图强在了解爬虫,这不是个现成的例子吗?

    (由于我已经在床上了,网页也打不开,我只能凭记忆回忆一下,代码后面补,专业名词说错了多多包涵,我真不看股票的,并且小半年不用python了,具体实现可能会略微复杂)

    首先观察网址,后面这一串数字一看,好家伙,这不上司公司的id吗,这波不直接在行业分类里把所有的公司id都爬下来,然后一个个去查找?

    但鉴于我刚学,懒,且不会。所以我选择直接下载了深交所提供的Excel文件,从里面提取。

    我们这时候提取出了公司名字和id,遍历id并把它与网址融合,然后发现网站结构差不多,这波直接找到需要的元素,爬下来就行啦。(由于py只学了个皮毛,所以不太会,写的可能麻烦了,没事能用就行)

    1. workbook = load_workbook(filename='d:/Users/asinz/Downloads/A股列表 (22).xlsx')
    2. sheet2 = workbook.active
    3. cells1 = sheet2["E"]
    4. k=[]
    5. for cell_columns in cells1:
    6. k.append(cell_columns.value)
    7. k.remove(k[0])
    8. cells2 = sheet2["F"]
    9. q=[]
    10. for cell_columns in cells2:
    11. q.append(cell_columns.value)
    12. dic={}
    13. for i in k:
    14. dic[i]=f(i)
    15. print(dic)

    然后有笨蛋对着html找数据所在的位置找了一个晚上,最后把下载下来的html和爬出来的html做对比,发现信息消失了!

    好吧我以为的爬虫的html是元素里的,实际上是index。那这波咋整?

    很明显好吧,这肯定是动态元素啊,当然是去网络里找啊。

    如何快速查找再哪里呢,那当然是拿着数值去搜啊

     研究对应的结构,并爬下来进行筛选,存入

    通过一个个查找我们找到了市值对应的key,把data爬下来,遍历到key的时候就输出,结束!

    等等,我们是不是忘了还缺啥

    哦对了,前三!

    开个排序就好啦!

    1. from tokenize import Double
    2. from openpyxl import load_workbook
    3. import requests
    4. import locale
    5. import time
    6. def f(z):
    7. time.sleep(0.5)
    8. #1指定url
    9. post_url = 'http://www.szse.cn/api/report/index/stockKeyIndexGeneralization?random=0.9574288098451655&secCode={}'.format(z)
    10. print(post_url)
    11. #2进行ua伪装。浏览器请求头中
    12. headers={
    13. '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'
    14. }
    15. #3post请求参数处理
    16. #4发送请求
    17. response=requests.get(url=post_url,headers=headers)
    18. #5获取响应数据,json()方法返回的是obj(如果确认响应数据是json类型的才可以用json返回
    19. dic_obj=response.json()
    20. for i in dic_obj:
    21. if i=='data':
    22. for j in dic_obj[i]:
    23. for k in j:
    24. if k=='now_sjzz':
    25. j[k] = float(j[k].replace(',',''))
    26. return float(j[k])
    27. #6进行持
    28. # 久化存储
    29. workbook = load_workbook(filename='d:/Users/asinz/Downloads/A股列表 (22).xlsx')
    30. sheet2 = workbook.active
    31. cells1 = sheet2["E"]
    32. k=[]
    33. for cell_columns in cells1:
    34. k.append(cell_columns.value)
    35. k.remove(k[0])
    36. cells2 = sheet2["F"]
    37. q=[]
    38. for cell_columns in cells2:
    39. q.append(cell_columns.value)
    40. dic={}
    41. for i in k:
    42. dic[i]=f(i)
    43. print(dic)
    44. dic=sorted(dic.items(),key=lambda x:x[1],reverse=True)
    45. for i in range(3):
    46. for j in range(len(k)):
    47. if k[j]==dic[i][0]:
    48. print(k[j],q[j+1],dic[i][1])

    结束

    刚好,平静了,该睡了。

    ---------------------9.13更新----------------

    我发四,我肯定不是因为今天汇报/交作业才补的代码和图片,我只是今天才想起来没放图片(溜)

    and笨蛋ccpc网络赛翻车了呜呜呜呜

    顺带加了个sleep,因为ip地址被禁用了(qaq)

  • 相关阅读:
    使用vscode Container开发调试envoy
    [Linux]套接字通信
    CYEZ 模拟赛 3
    csdn最新最全pytest系列——pytest-xdist插件之多进程运行测试用例|| pytest-parallel插件之多线程运行测试用例
    【Vue】v-model修饰符
    C/S架构学习之广播
    DDD领域驱动设计-视频讲解+实战
    【每日一题Day351】LC2530执行 K 次操作后的最大分数 | 原地堆化
    【ceph】ceph集群的故障域是怎么快速修改导入导出
    AQS源码解析 8.共享模式_Semaphore信号量
  • 原文地址:https://blog.csdn.net/yeah17981/article/details/126756985