Python实战系列-东方财富网显示研报报错最新解决方案

最近在查东方财富网最新研报的时候,发现报错,第一怀疑就是html又变了,果然是的:so.eastmoney.com/Yanbao/s?ke... 以前的代码

python 复制代码
# # 获取多页信息

# In[ ]:


from selenium import webdriver
import re
import requests


# In[20]:


browser = webdriver.Chrome()

data_all = ''
for i in range(10):
    url = 'http://so.eastmoney.com/Yanbao/s?keyword=格力电器&pageindex=' + str(i+1)
    browser.get(url)
    data = browser.page_source
    data_all = data_all + data  # 拼接每一页网页源代码
    
# 正则提取
p_href = '<div class="list-item">.*?<a href="(.*?)"'
href = re.findall(p_href, data_all)

href


# In[21]:


for i in range(len(href)):  # 这里的href就是多个页面提取出的href了
    # 1.请求研报跳转页面
    browser = webdriver.Chrome()
    browser.get(href[i])
    data = browser.page_source
    browser.quit()
    
    # 2.提取跳转页面中的标题和PDF下载网址
    p_name = '<h1>(.*?)</h1>'
    p_href_pdf = '<a class="rightlab" href="(.*?)">【点击查看PDF原文】</a>'
    name = re.findall(p_name, data)
    href_pdf = re.findall(p_href_pdf, data)
    
    # 3.利用3.7节相关知识点下载PDF文件
    res = requests.get(href_pdf[0])  # 研报文件比较大,下载需要等待一些时间
    path = '格力研报\\' + name[0] + '.pdf'
    file = open(path, 'wb')
    file.write(res.content)
    file.close()

报错就是找不到元素,于是查看元素修改如下 这里面有几个地方需要注意: 1、之前的分页已经不work,需要模拟点击下一页来获取,首先要确定总共有多少页:

python 复制代码
p_page = '<a href="#" data-pi="2"'
pageCount = len(re.findall(p_page, browser.page_source))

2、模拟点击下一页事件:

python 复制代码
if i > 0:
    browser.find_element(by=By.XPATH,value='//*[@id="app"]/div[3]/div[1]/div[3]/div/a[5]').click()
    time.sleep(3)  # 这里必须要加3秒的延迟,因为有个刷新的动作需要等待下

3、注意延迟时间一定要加

python 复制代码
time.sleep(3)  # 这里必须要加3秒的延迟,因为有个刷新的动作需要等待下

4、p_href的获取已经变了,已经html已经更新,改成如下:

python 复制代码
# 正则提取
# p_href = '<div class="list-item">.*?<a href="(.*?)"'

p_href = '<div class="notice_item_link" tracker-eventcode="dfcfwss.ssh.ryq.nrdj" tracker-extinfo="' + "{'LocModuleKey': '研报','searchKeyWord': '格力电器'}" + '"><a href="(.*?)"'
href = re.findall(p_href, data_all)

5、加入re.S忽略换行

python 复制代码
    name = re.findall(p_name, data, re.S)
    print(name[0].replace("\n","").strip())
    href_pdf = re.findall(p_href_pdf, data)

6、注意文件名称的特殊处理

python 复制代码
path = '格力研报\\' + name[0].replace("\n","").strip() + 

以下完整代码:

python 复制代码
#!/usr/bin/env python
# coding: utf-8

# # 获取单页研报信息

# In[1]:


from selenium import webdriver
import re
import requests
from selenium.webdriver.common.by import By

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}


# In[13]:


# # 获取多页信息

# In[ ]:


from selenium import webdriver
import re
import requests
import time


# In[20]:


browser = webdriver.Chrome()

url = 'http://so.eastmoney.com/Yanbao/s?keyword=格力电器'
browser.get(url)
time.sleep(5)
data_all = ''

p_page = '<a href="#" data-pi="2"'
pageCount = len(re.findall(p_page, browser.page_source))

for i in range(pageCount):
    # //*[@id="app"]/div[3]/div[1]/div[3]/div/a[5]
    if i > 0:
        browser.find_element(by=By.XPATH,value='//*[@id="app"]/div[3]/div[1]/div[3]/div/a[5]').click()
        time.sleep(3)  # 这里必须要加3秒的延迟,因为有个刷新的动作需要等待下

    # browser.find_element(by=By.CLASS_NAME, value='gotoform').send_keys(i+1)
    # browser.find_element(by=By.CLASS_NAME, value='gotoform').click()

    # url = 'http://so.eastmoney.com/Yanbao/s?keyword=格力电器&pageindex=' + str(i+1)
    # browser.get(url)
    data = browser.page_source
    # print('start')
    print(data)
    # print('end')
    data_all = data_all + data  # 拼接每一页网页源代码
    
# 正则提取
# p_href = '<div class="list-item">.*?<a href="(.*?)"'

p_href = '<div class="notice_item_link" tracker-eventcode="dfcfwss.ssh.ryq.nrdj" tracker-extinfo="' + "{'LocModuleKey': '研报','searchKeyWord': '格力电器'}" + '"><a href="(.*?)"'
href = re.findall(p_href, data_all)

href


# In[21]:


for i in range(len(href)):  # 这里的href就是多个页面提取出的href了
    # 1.请求研报跳转页面
    print(i)
    browser = webdriver.Chrome()
    browser.get(href[i])
    data = browser.page_source
    browser.quit()
    
    # 2.提取跳转页面中的标题和PDF下载网址
    #p_name = '<h1>(.*?)</h1>'
    p_name = '<h1>(.*?)</h1>'
    p_href_pdf = '<a class="rightlab" href="(.*?)">【点击查看PDF原文】</a>'
    #p_href_pdf = '<a style="color: #039; text-decoration: underline; font-family: 宋体; font-size: 14px;" href="(.*?)"><span class ="icon icon_pdf valign-middle"></span>查看PDF原文</a>'
    name = re.findall(p_name, data, re.S)
    print(name[0].replace("\n","").strip())
    href_pdf = re.findall(p_href_pdf, data)
    
    # 3.利用3.7节相关知识点下载PDF文件
    res = requests.get(href_pdf[0])  # 研报文件比较大,下载需要等待一些时间
    path = '格力研报\\' + name[0].replace("\n","").strip() + '.pdf'
    file = open(path, 'wb')
    file.write(res.content)
    file.close()
相关推荐
量化君也5 分钟前
桥水基金全天候策略拆解,构建中国ETF躺平版策略
大数据·人工智能·python·算法·金融·业界资讯
爱吃苹果的梨叔13 分钟前
2026年分布式坐席系统哪家好:指挥中心与调度大厅选型参考
分布式·python
Stick_ZYZ15 分钟前
A2A:让 Agent 从单兵作战走向团队协作
java·开发语言·网络·人工智能·python·ai
weixin_3077791317 分钟前
从切片迷宫到结构化智能:AI Agent解析PDF的完整范式
图像处理·人工智能·python·自动化·ocr
benben04421 分钟前
ONNX从入门到精通大全
人工智能·pytorch·python
程序猿零零漆22 分钟前
Python 基础核心知识总结:函数、文件操作、异常、模块与常用内置模块
python
枫叶林FYL31 分钟前
项目十一:Saga模式分布式旅行预订系统 核心服务实现与Saga编排器
数据库·python·docker
流浪法师解剖鱼32 分钟前
CocosCreator制作推箱子游戏
python·cocos2d
财经资讯数据_灵砚智能38 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月9日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
仙俊红41 分钟前
深入理解 ThreadLocal —— 从变量引用、强弱引用到 Spring Boot 实战
spring boot·python·算法