用Python脚本自动采集金融网站当天发布的免费报告

news2024/12/27 11:23:29

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

其间旦暮闻何物?杜鹃啼血猿哀鸣。

大家好,我是皮皮。

一、前言

前几天在Python群【林生】问了一个Python数据采集的问题,需求如下:

想写一个脚本能自动采集下载当天发布的这个页面的这几个免费报告,能保存成这个标题的pdf文件,网站是手机号注册就能下载这些文件的,就是在我注册登录状态下,能采集下载。

b53564a77aaddc8790d1de6d56036939.png

二、实现过程

一开始以为网站有逆向,还觉得挺难的,后来发现完全是裸奔,就放心了,发布任务到接单裙,一下子就被抢了,毕竟送钱的单子,人见人爱,花见花开了,300元的爬虫单子,也很香了。

下面是部分核心代码,如果你也对这个感兴趣的话,欢迎私我拿全部源码。

# -*- coding:utf-8 -*-
"""
开发环境:Python 3.86
脚本名称:2023-07-07 报告厅baogaoting
创建日期:2023年07月07日
"""
import datetime
import os, sys, time, traceback
import pathlib
from parsel import Selector
import requests

headers = {
 "xxx"
}
cookies = {
 "xxx"
}

def _down_file(dow_url,file_name):
 """
 :param dow_url:   下载链接
 :param file_name:  图片绝对路径 包括后缀名
 :return:
 """
 re_重试次数=0
 while True:
  try:
   response = requests.get(dow_url, headers=headers, cookies=cookies, timeout=10)
   if response.status_code == 200:
    break
   elif response.status_code == 404:
    break
   else:
    print(response.status_code)
    re_重试次数 += 1
  except Exception as e:
   adress = sys.exc_info()[-1]  # 异常地址
   line_error = traceback.extract_tb(adress, limit=1)[-1][1]  # 读取错误日志,最后一列的第二个元素即为模块出错行
   print(
    f"===================\n【异常原因】:{e}\n【异常类型】:{type(e)}\n【异常位置】:{line_error}\n===================")
   time.sleep(5)
   re_重试次数 += 1
  if re_重试次数 >= 10:
   response=""
   break
 if response:
  with open(file_name, "wb+") as f:  # , errors='ignore'
   f.write(response.content)
 else:
  print(f"【跳过】:下载失败{file_name}")


import winreg
def get_desktop():
 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
 return winreg.QueryValueEx(key, "Desktop")[0]

if __name__ == '__main__':
 zm_path=get_desktop()
 x_date = time.strftime("%Y-%m-%d")
 list_file_path=list(pathlib.Path(x_date).rglob("*"))
 dict_file_path={i.name:True for i in list_file_path}
 
 url = "https://www.baogaoting.com/space/30909237"
 for page in  range(1,3):
  params = {
   "page": page,
   "size": "15"
  }
  response = requests.get(url, headers=headers, cookies=cookies, params=params)
  """
    此处略去多行代码
    """
     print(f"【{title}】:热度{h3} 是当天上传的资料,准备访问下载{href_download}")
     if href_download:
      if not os.path.exists(f"{zm_path}//今日研报"):
       os.makedirs(f"{zm_path}//今日研报",exist_ok=True)
      title=title+ pathlib.Path(href_download).suffix
      #print(href_download, h3,title)
      for k in ["<", ">", "|", '"', "*", '\\', ":", "/", "?", "\n", "\r", "\t", "!", "☆"]:
       date = date.replace(k, '').strip()
      if dict_file_path.get(f"{date}_"+title):
       print(f"【状态】:已经下载了哦,自动跳过")
       continue
      else:
       _down_file(href_download, f"{zm_path}//今日研报//{title}")
     else:
      print(f"【状态】:链接{href_download} {title}无效,跳过不下载")
      
    else:
     print(f"【状态】:不是免费的,不下载")
    time.sleep(0.5)
   else:
    print(f"【状态】:{date} 上传时间不符合,直接结束!")
    break
 input(f"【状态】:完成了哦,按任意键退出软件")

顺利地解决了粉丝的问题。

cb8b6ce64b2089b0c5648003eeefb3cb.png

这样每天打开软件,就可以获取到想要的研报文件了,再也不用挨个去下载,解放双手。

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

c8e451f6c708304d317634b22afcd605.png

大家在学习过程中如果有遇到问题,欢迎随时联系我解决(我的微信:pdcfighting1),应粉丝要求,我创建了一些ChatGPT机器人交流群和高质量的Python付费学习交流群和付费接单群,欢迎大家加入我的Python学习交流群和接单群!

7f42514d552886b9558dca8ec1c0e764.png

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

39af75096fe175f44c85b978c2618364.jpeg

------------------- End -------------------

往期精彩文章推荐:

  • if a and b and c and d:这种代码有优雅的写法吗?

  • Pycharm和Python到底啥关系?

  • 都说chatGPT编程怎么怎么厉害,今天试了一下,有个静态网页,chatGPT居然没搞定?

  • 站不住就准备加仓,这个pandas语句该咋写?

b86c017f270935cc9f497a348ff2c51c.png

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

随便说一两句吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PCL点云处理之最小二乘直线拟合(2D| 方法2)(❤亲测可用❤)(二百零一)

PCL点云处理之最小二乘直线拟合(2D| 方法2)(❤亲测可用❤)(二百零一) 一、算法简介二、算法实现1.代码2.结果一、算法简介 在二百章中,我们介绍了一种最小二乘拟合直线点云(2D)的方法,可以获取直线方程系数k,b,这里介绍另一种拟合直线点云的方法,更为简单方便,结果…

引入第三方字体库 第三方字体库Google Fonts

googlefonts官方网站 googlefonts中国网站 本人是在微信小程序中引入 在static中建一个文件夹font-family 例如字体链接&#xff1a;https://fonts.font.im/css?familyKirangHaerang 将该链接的返回的资源的复制到css文件中 font-family.css /* [0] */ font-face {font-fam…

Linux学习之Ubuntu 20.04安装内核模块

参考博客&#xff1a;Ubuntu20.04编译内核教程 sudo lsb_release -a可以看到我当前的系统是Ubuntu 20.04.4&#xff0c;sudo uname -r可以看到我的系统内核版本是5.4.0-100-generic。 sudo apt-get install -y libncurses5-dev flex bison libssl-dev安装所需要的依赖。 su…

国密SSL优势及应用场景

国密SSL的优势主要有以下几点&#xff1a; 更高的安全性&#xff1a;国密算法采用的是国家密码管理局推荐的算法&#xff0c;相对于传统的SSL协议更加安全。 更好的性能&#xff1a;国密算法是国家密码管理局推荐的算法&#xff0c;其加密效率与密钥长度相比传统算法更高。 更…

Java集合之List

ArrayLsit集合 ArrayList集合的特点 ArrayList集合的一些方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素个数。 ③.get(int index) 返回列表中指定位置的元素&#xff0c;index从0开始。 public class Test {public static void m…

【Python学习笔记】记载解决Python报错HTTP Error 403: Forbidden的一波三折过程

【Python学习笔记】记载解决Python报错HTTP Error 403: Forbidden的一波三折过程 当前进度&#xff1a;还没有解决&#xff0c;但是已经尝试了好几种办法&#xff0c;此处做个记录&#xff0c;也许能帮上忙。 本帖是整理回顾帖&#xff0c;不是教程帖&#xff0c;追求一个完美…

QT日志调试系统(前台、后台、文件查看调试信息)

通过qInstallMessageHandler获取Qt的打印信息&#xff0c;将这些打印信息存放到一个Widget中&#xff0c;实现不通过后台就能查看日志信息。 实现方法如下&#xff1a; main.cpp #include "mainwidget.h" #include <QApplication> #include <QStyleFactory…

yum的安装和使用(包含安装过程中遇到的问题及解决方法)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

2022年十月份电赛OpenMV巡线方案详细代码分析(1)

前言 &#xff08;1&#xff09;马上要进行电赛了&#xff0c;机器识别是铁定会使用到的。为了防止出现去年十月份那种特殊的巡线方案。我在此分享出OpenMV巡线方案&#xff0c;并且进行讲解和分析如何更改。 &#xff08;2&#xff09;学习本文之前&#xff0c;需要学习&#…

通过nexus3部署公司内部的私有npm仓库

简介&#xff1a; 登录时使用默认用户admin&#xff0c;密码不知道就需要找默认的&#xff0c;点击Sign in时会提示你路径&#xff0c;这里我是这样查的&#xff0c;在linux服务器上输入以下命令 ​编辑 前言&#xff1a; 准备工作&#xff0c;可能需要一台linux服务器&#x…

Jenkins报警机制的配置与Linux的使用总结

先在钉钉中添加一个机器人 在Configure System中找到机器人选项&#xff0c;并且复制webhook到网络钩子&#xff0c;然后添加机器人的编号、名称和关键词&#xff0c;然后点击测试&#xff0c;如果显示测试成功则表示配置成功&#xff0c;最后保存 再到配置中勾选顶顶机器人的定…

19.matlab数据分析插值(matlab程序)

1.简述 数据插值的计算机制 数据插值是一种函数逼近的方法。 一维插值 Y1interp1(X,Y,X1,method) 二维插值 interp2():二维插值函数。 调用格式: Z1interp2(X,Y,Z,X1,Y1,method) 其中&#xff0c;X、Y是两个向量&#xff0c;表示两个参数的采样点, Z是采样点对应的函数值。X1…

flutter开发实战-Stagger Animation实现水波纹动画

flutter开发实战-实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 一、效果图 二、实现水波纹效果 实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 交织动画 有些时候我们可能会需要一些…

一种具有改进的反向导通、击穿和开关特性的新型4H-SiC沟道MOSFET

标题&#xff1a;A New 4H-SiC Trench MOSFET With Improved Reverse Conduction, Breakdown, and Switching Characteristics 阅读日期&#xff1a;2023.07.23 研究了什么 该文提出并通过TCAD模拟研究了一种带有集成MOS通道二极管&#xff08;MCD&#xff09;的SiC MOSFET&a…

性能测试Ⅵ(总结)

locust&#xff1a;是基于Python语言的性能测试工具&#xff0c;它是基于协程的思想来进行设计的。Python语言是没有办法利用多核的优势&#xff0c;所以了Python为了解决这个问题&#xff0c;设计了协程&#xff0c;作为协程的任务&#xff0c;遇到IO堵塞就立刻切换。 生命是协…

FFmpeg5.0源码阅读—— avcodec_send_frame avcodec_receive_packet

摘要&#xff1a;本文主要描述了FFmpeg中用于编码的接口的具体调用流程&#xff0c;详细描述了该接口被调用时所作的具体工作。   关键字&#xff1a;ffmpeg、avcodec_send_frame、avcodec_receive_packet   读者须知&#xff1a;读者需要了解FFmpeg的基本使用流程&#xf…

AQS概述

基本介绍 队列同步器AbstractQueuedSynchronizer&#xff08;以下简称同步器&#xff09;&#xff0c;是用来构建锁或者其他同步组件的基础框架。 使用了一个int成员变量&#xff08;volatile int state&#xff09;表示同步状态&#xff0c;通过内置的FIFO队列来完成资源获取…

【NLP】如何使用Hugging-Face-Pipelines?

一、说明 随着最近开发的库&#xff0c;执行深度学习分析变得更加容易。其中一个库是拥抱脸。Hugging Face 是一个平台&#xff0c;可为 NLP 任务&#xff08;如文本分类、情感分析等&#xff09;提供预先训练的语言模型。 本博客将引导您了解如何使用拥抱面部管道执行 NLP 任务…

不写代码开启Restful服务

1 前言 很久没有写文章了&#xff0c;不管什么原因&#xff0c;总觉得心里还是觉得有点焦虑&#xff0c;不看看书写点东西就有莫名的焦虑&#xff0c;仿佛只有忙起来才能忘记焦虑。虽然我也知道更重要的是思考方向&#xff0c;但是就像走路&#xff0c;不出发随着时间的流逝&am…

MacBook外接键盘修改键位

众所周知&#xff0c;MacBook的键盘和Windows差别很大&#xff0c;比如我们最常用的ctrlcv在Mac下是commandcv…而外接键盘往往是Windows布局&#xff0c;因此如何修改外接键盘键位就是一件很重要的事情&#xff01; 首先&#xff0c;我们要知道Win键在Mac系统中是多余的&…