ANorange33c 2024-06-06 03:00 采纳率: 0%
浏览 115

python从巨潮资讯网批量下载指定范围年报

可以帮我看看为什么运行不了吗?
想要实现的目的:根据企业代码.xlxs里的企业名单在巨潮资讯网搜索2023年年度报告并下载
代码:

import os
import time
from selenium import webdriver # type: ignore
from selenium.webdriver.common.keys import Keys # type: ignore
from openpyxl import load_workbook # type: ignore
from selenium.webdriver.chrome.service import Service  # type: ignore
# 读取企业代码
def read_company_codes(file_path):
    wb = load_workbook(file_path)
    ws = wb.active
    company_codes = []
    for row in ws.iter_rows(min_row=2, values_only=True):
        company_codes.append((row[0], row[1]))
    return company_codes

# 下载年报
def download_annual_reports(company_codes):
    service = Service('C:\Program Files\ESBrowser\chromedriver.exe')  
    driver = webdriver.Chrome(service=service)
    driver.get("http://www.cninfo.com.cn/new/index")

    for code, name in company_codes:
        # 搜索年报
        search_box = driver.find_element_by_id("searchKeyword")
        search_box.clear()
        search_box.send_keys(code)
        search_box.send_keys(Keys.ENTER)

        # 选择分类-年报
        annual_reports_link = driver.find_element_by_xpath("//a[contains(text(), '年报')]")
        annual_reports_link.click()

        # 下载年报
        download_button = driver.find_element_by_xpath("//a[contains(text(), '下载')]")
        download_button.click()

        # 等待下载完成
        time.sleep(5)

        # 重命名文件
        old_file_path = "D:\\数据采集\\年报\\" + code + ".pdf"
        new_file_path = "D:\\数据采集\\年报\\" + code + "_" + name + ".pdf"
        os.rename(old_file_path, new_file_path)

    driver.quit()

配置环境:pyhton3.11.9 64bit
1.

img

2.企业代码.xlxs的数据结构

img


3.selenium.库

img

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-06-06 08:31
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的信息和代码,我将帮助您逐步排查可能的问题:

    1. 环境配置

    • Python版本:您使用的是Python 3.11.9 64位,这与selenium库的版本4.21.0兼容。
    • Chromedriver和Chrome浏览器:您已确认chromedriver版本与Chrome浏览器版本匹配,这是正确的步骤。

    2. 文件路径

    • chromedriver路径C:\Program Files\ESBrowser\chromedriver.exe 路径看起来是正确的,但请确保该路径下确实存在chromedriver.exe文件。

    3. 企业代码数据

    • 数据结构:根据您提供的截图,企业代码和名称似乎是以两列的形式存储在Excel文件中,这与您的代码逻辑相匹配。

    4. 代码逻辑

    • 读取Excel文件:使用openpyxl库读取Excel文件的逻辑看起来是正确的。
    • Selenium操作:您的代码中使用selenium打开浏览器、搜索年报、点击下载和重命名文件的逻辑也是正确的。

    5. 错误排查

    • 网络连接:请确保您的网络连接正常,并且可以访问巨潮资讯网。
    • Selenium控制Chrome:尝试运行一个简单的selenium脚本,比如打开一个网页,以确保selenium可以控制Chrome浏览器。
    • XPath选择器:请检查XPath选择器是否正确。您可以通过在浏览器中使用开发者工具来验证XPath。
    • 文件下载和重命名:确保下载路径D:\\数据采集\\年报\\存在,并且您的用户账户有写入权限。

    6. 代码实现和参考资料

    • 代码实现:您的代码实现看起来是合理的,但可能需要添加一些异常处理来捕获和处理运行时错误。
    • 参考资料:您可以参考selenium的官方文档来获取更多关于如何使用selenium的信息:Selenium Documentation

    建议的额外步骤

    1. 异常处理:在您的代码中添加异常处理,以便在遇到错误时能够提供更多信息。
    2. 日志记录:添加日志记录,记录关键步骤的执行情况,这有助于调试。
    3. 逐步调试:逐行执行代码,检查每个步骤的执行结果,特别是selenium操作部分。

    示例代码添加异常处理

    def download_annual_reports(company_codes):
        service = Service('C:\Program Files\ESBrowser\chromedriver.exe')
        driver = webdriver.Chrome(service=service)
        driver.get("http://www.cninfo.com.cn/new/index")
    
        try:
            for code, name in company_codes:
                try:
                    # ... 省略其他代码 ...
                    # 确保下载按钮点击后有实际的下载行为发生
                    download_button.click()
                    time.sleep(5)  # 等待时间可能需要根据实际情况调整
                except Exception as e:
                    print(f"Error downloading annual report for {code}: {e}")
        finally:
            driver.quit()
    

    请注意,time.sleep(5)可能不足以确保文件下载完成,您可能需要根据实际情况调整等待时间或使用更高级的等待策略,如WebDriverWaitexpected_conditions

    希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更详细的错误信息或日志,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月6日