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

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

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

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

大家好,我是皮皮。

一、前言

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

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

二、实现过程

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

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

go 复制代码
# -*- 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"【状态】:完成了哦,按任意键退出软件")

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

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

三、总结

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

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

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

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

--- ----- ------** -----********************************** End --- ------- ------** ---**********************************

往期精彩文章推荐:

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

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

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

/今日留言主题/

随便说一两句吧~~

相关推荐
FinAnalyzer5 分钟前
如何在 InsCodeAI 上搭建并使用 Jupyter Notebook 环境?
ide·python·jupyter
java1234_小锋7 分钟前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章分类下拉框实现
python·自然语言处理·flask
檀越剑指大厂7 分钟前
【Python系列】Flask 应用中的主动垃圾回收
开发语言·python·flask
檀越剑指大厂14 分钟前
【Python系列】使用 memory_profiler 诊断 Flask 应用内存问题
开发语言·python·flask
笠码16 分钟前
JVM Java虚拟机
java·开发语言·jvm·垃圾回收
WXX_s26 分钟前
【OpenCV篇】OpenCV——03day.图像预处理(2)
人工智能·python·opencv·学习·计算机视觉
橙小花30 分钟前
C语言:指针、变量指针与指针变量、数组指针与指针数组
c语言·开发语言
Cyanto1 小时前
MyBatis-Plus高效开发实战
java·开发语言·数据库
艾莉丝努力练剑1 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
Jackilina_Stone2 小时前
【论文|复现】YOLOFuse:面向多模态目标检测的双流融合框架
人工智能·python·目标检测·计算机视觉·融合