python爬虫:下载上海证券交易所的最新的公告PDF

  1. 动态加载内容 :该网页可能是通过 JavaScript 动态加载的,而 requests 无法处理动态内容。因此,直接使用 requests 获取到的 HTML 中可能不包含 PDF 链接。

  2. HTML 结构不匹配 :网页结构可能与你预期的不同,导致 BeautifulSoup 查找不到匹配的标签。你可以检查 HTML 的结构,确保你使用的选择器(例如 class_='iconfont iconxiazai')正确。

解决方法:

  1. 检查网页内容 :

    在代码中打印页面的HTML内容,看看 requests.get() 获取到的网页是否包含PDF链接的部分:

    python 复制代码
    print(response.text)  # 打印获取到的HTML内容
  2. 使用Selenium处理动态加载的网页 :

    如果网页使用了动态加载技术(例如AJAX或JavaScript),可以使用 Selenium 来模拟浏览器操作,并获取完整的页面内容。

Selenium 示例代码:

以下是如何使用 Selenium 来处理动态加载网页的示例:

安装依赖:
bash 复制代码
pip install selenium

你还需要下载对应的浏览器驱动(如ChromeDriver),并将其路径加入系统环境变量。

代码示例:
python 复制代码
import os
from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 设置你要保存PDF文件的目录
DOWNLOAD_DIR = "pdf_downloads"
if not os.path.exists(DOWNLOAD_DIR):
    os.makedirs(DOWNLOAD_DIR)

# 设置目标URL
base_url = "https://www.sse.com.cn"

# 目标网页的公告URL
announcement_url = "https://www.sse.com.cn/disclosure/listedinfo/announcement/"

# 启动浏览器
driver = webdriver.Chrome()  # 请确保你已安装并配置了对应的ChromeDriver
driver.get(announcement_url)

# 等待页面加载完成
time.sleep(5)

# 获取页面内容
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

# 查找所有带有PDF文件链接的<a>标签
pdf_links = soup.find_all('a', href=True)

# 遍历查找到的所有链接,下载PDF
for link in pdf_links:
    pdf_relative_url = link['href']  # 获取相对路径
    if pdf_relative_url.endswith('.pdf'):
        pdf_url = base_url + pdf_relative_url  # 拼接成完整的URL
        pdf_name = os.path.join(DOWNLOAD_DIR, pdf_url.split("/")[-1])  # 使用文件名保存PDF

        # 下载PDF文件
        print(f"Downloading {pdf_name}...")
        pdf_response = requests.get(pdf_url)
        with open(pdf_name, 'wb') as pdf_file:
            pdf_file.write(pdf_response.content)

        print(f"Downloaded {pdf_name}")

# 关闭浏览器
driver.quit()

print("All PDF files have been downloaded.")

关键步骤:

  1. Selenium 模拟浏览器:Selenium 会加载页面,确保动态加载的内容能够被正确解析。
  2. 处理动态内容 :通过 driver.page_source 获取完整的页面HTML,然后使用 BeautifulSoup 进行解析。

总结:

使用 Selenium 可以解决动态加载的内容问题,并且通过这种方式,你可以抓取到包含PDF链接的完整网页内容。如果网页确实是动态生成的,那么这种方法应该可以帮助你成功获取PDF文件的链接。

相关推荐
卷无止境9 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋10 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc10 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂12 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋14 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢15 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚16 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机17 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_17 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰17 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain