巨潮资讯(http://www.cninfo.com.cn/)数据爬取

'''
    巨潮资讯(http://www.cninfo.com.cn/)数据爬取

    最新公告网址:
    http://www.cninfo.com.cn/new/disclosure/stock?stockCode=601519&orgId=9900017431
    定期报告网址:
    http://www.cninfo.com.cn/new/disclosure/stock?stockCode=601519&orgId=9900017431#periodicReports
'''

import requests

url = 'http://www.cninfo.com.cn/new/hisAnnouncement/query'

#自动生成的文件头信息;
#最好再模拟不同的浏览器访问
headers = {
  "Accept": "application/json, text/javascript, */*; q=0.01",
  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  "Connection": "keep-alive",
  "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
  "Cookie": "JSESSIONID=DF28F2A2C38640EC78531475CEDABBDB; insert_cookie=37836164; routeId=.uc2; cninfo_user_browse=601519,9900017431,%E5%A4%A7%E6%99%BA%E6%85%A7|600519,gssh0600519,%E8%B4%B5%E5%B7%9E%E8%8C%85%E5%8F%B0|600030,gssh0600030,%E4%B8%AD%E4%BF%A1%E8%AF%81%E5%88%B8; SID=f3a336a7-e913-4de8-8dd0-1e8e3017bfbb; _sp_id.2141=9802fb76-2236-47f2-9215-9dfa6496e964.1697805509.7.1697884826.1697880028.64529e1c-582f-4bb7-acb8-73b2231212a5",
  "Origin": "http://www.cninfo.com.cn",
  "Referer": "http://www.cninfo.com.cn/new/disclosure/stock?stockCode=601519&orgId=9900017431",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57",
  "X-Requested-With": "XMLHttpRequest"
}

#post请求数据
data={
  "stock": "601519,9900017431",
  "tabName": "fulltext",
  "pageSize": "30",
  "pageNum": "1",
  "column": "sse",
  "category": "category_ndbg_szsh;category_bndbg_szsh;category_yjdbg_szsh;category_sjdbg_szsh;",
  "plate": "sh",
  "seDate": "",
  "searchkey": "",
  "secid": "",
  "sortName": "",
  "sortType": "",
  "isHLtitle": "true"
}
#证券代号
#"stock": "601519,9900017431",      #大智慧
#  "stock": "600030,gssh0600030",   #中信证券

# 发送GET请求,目的是获取总页数
response = requests.post(url, headers=headers, data=data).json()
totalpages = response['totalpages']+1

#外循环控制页数
for i in range(1,totalpages+1):
    #读取页面数据;第一页读取了2次
    page_no = str(i)
    data["pageNum"] = page_no
    response = requests.post(url, headers=headers, data=data).json()
    #print(response) #测试一下
    
    #内循环读取一页中的每一行数据  
    for item in response['announcements']:
        file_url = 'https://static.cninfo.com.cn/'+item['adjunctUrl']
        file_name = item['announcementTitle']
        print(file_name,'正在下载...',file_url)
        #将PDF文件数据写入本地文件
        response = requests.get(file_url,headers=headers)
        with open('./download/'+str(page_no)+'--'+file_name+'.pdf','wb') as file:
            file.write(response.content)
    print('-'*100)
    print(f'第{page_no}页')
    #break   #测试一次外循环
    
print("数据全部抓取,完美!")
 

### 构建针对巨潮资讯网的网页爬虫 为了高效地从巨潮资讯网获取所需的数据,构建一个专门用于该网站的网页爬虫是一个有效的方案。以下是实现这一目标的关键要素: #### 了解目标网站结构 在着手编写任何代码之前,理解目标网站——即巨潮资讯网的具体页面布局和数据分布至关重要。这包括识别存储年度报告的位置及其URL模式。 #### 准备必要的库 Python提供了丰富的第三方库来简化网络请求与HTML解析过程。`requests`库可用于发起HTTP/HTTPS请求;而像BeautifulSoup或者lxml这样的工具则有助于提取网页中的特定信息片段[^1]。 ```python import requests from bs4 import BeautifulSoup ``` #### 编写下载函数 定义一个能够接收文件链接作为参数并将其保存到本地磁盘上的功能模块是非常重要的一步。此操作不仅限于简单的GET请求发送,还需要考虑异常情况下的重试机制以及合理的错误处理逻辑[^2]。 ```python def download_file(file_url, file_name, headers): try: response = requests.get(file_url, headers=headers) folder_path = r"D:\概念板块\巨潮资讯网" os.makedirs(folder_path, exist_ok=True) file_path = os.path.join(folder_path, file_name) with open(file_path, 'wb') as file: file.write(response.content) return file_path except Exception as e: print(f"Error downloading {file_name}: ", str(e)) return None ``` #### 发送POST请求获取列表 对于某些需要通过表单提交才能访问的内容(例如查询条件),可以利用`requests.post()`方法模拟浏览器行为向服务器传递参数从而获得期望的结果集。这里需要注意设置合适的header以模仿真实用户的浏览习惯,提高成功率[^3]。 ```python query_data = { # Fill out the form data here according to actual requirements. } response = requests.post(url=query_path, headers=headers, data=query_data) soup = BeautifulSoup(response.text, 'html.parser') ``` #### 遵守道德准则和技术规范 当开发此类自动化脚本时,请务必尊重对方站点的服务条款,并控制好抓取频率以免给源站带来过大的负载压力。同时也要注意保护个人隐私及敏感资料的安全性,在合法合规的前提下开展工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值