【python爬虫】批量爬取上海证券交易所绿色债券招募说明书

有个朋友想下载上海证券交易所的绿色债券招募说明书,如果一个一个手动下载,需要比较多的时间。

跟我探讨是否可以用爬虫实现,研究了一段时间后,终于实现啦

本文提供批量爬取上海证券交易所绿色债券招募说明书的方法和全量代码。

本文目录
  1. 导入库

  2. 模拟登录上海证券交易所

  3. 定义获取单页所有绿色债券说明书的函数

  4. 写循环获取所有绿色债券说明书链接

  5. 获取招募说明书的数量并导出招募书链接

  6. 根据招募说明书链接下载全量pdf文件


一、导入库

首先导入爬虫需要的库,代码如下:

import osimport jsonimport timeimport randomimport pandas as pdfrom captcha import * from datetime import datetimefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import waitfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom webdriver_manager.chrome import ChromeDriverManagerfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support import expected_conditions as EC#导入库


二、模拟登录上海证券交易所

然后模拟登录上海证券交易所的网址,定位到绿色债券招募说明书模块,代码如下:

browser = webdriver.Chrome(ChromeDriverManager().install())browser.maximize_window()login_url = 'http://www.sse.com.cn/home/search/index.shtml?webswd=%E7%BB%BF%E8%89%B2%E5%80%BA%E5%88%B8%E6%8B%9B%E5%8B%9F%E8%AF%B4%E6%98%8E%E4%B9%A6'browser.get(login_url)time.sleep(random.uniform(3, 5))browser.implicitly_wait(20)
得到结果:




三、定义获取单页所有绿色债券说明书的函数

接着定义获取当前页面所有绿色债券招募说明pdf的函数,代码如下:

pdf_links = []names = []#获取当页所有的网址信息def page_pdf_link():    for i in range(1, 11):        text = "/html/body/div[8]/div/div[2]/div[1]/div[1]/div[4]/ul/li[" + str(i) + "]/div[1]/a[@href]"        elems = browser.find_elements_by_xpath(text)        for elem in elems:            pdf_link = elem.get_attribute("href")            name = elem.get_attribute("text")            print(pdf_link)        names.append(name)        pdf_links.append(pdf_link)

其中names变量中存放绿色债券招募说明书的名称,pdf_links中存放绿色债券招募说明对应pdf下载链接。


四、写循环获取所有绿色债券说明书链接

写循环,获取所有的绿色债券说明书pdf文档链接,代码如下:

for i in range(1, 500):    try:        page_pdf_link()        #获取当前页面全量网址        browser.find_element_by_xpath('//*[@id="tab-main0"]/div[1]/div[4]/div/ul/li[9]/a').click()        #点击下一页        time.sleep(random.uniform(2, 4))    except:        pass

page_pdf_link():获取单页所有绿色债券说明书的名称和下载链接函数。

然后点击下一页,循环获取所有页面中的pdf链接。

得到结果:


五、获取招募书的数量并导出招募书链接

接着获取招募说明书的数量,代码如下:

len(pdf_links)

得到结果:

5030

说明总计有5030个绿色债券说明书pdf文件。

然后导出绿色债券说明书pdf文件链接和对应名称,代码如下:

import pandas as pd import os  
os.chdir('F:\公众号\89_爬上海证券交易所')date = pd.DataFrame(names, pdf_links)date.to_csv('links.csv', encoding='gbk')

得到结果:



六、根据招募说明书链接下载全量pdf文件

最后根据绿色债券招募说明书的链接下载全量pdf,并根据招募说明书名称保存成对应的pdf文件,代码如下:

import io  import requests  
os.chdir(r'F:\公众号\89_爬上海证券交易所\pdf')for i in range(1, 5031): # 发送GET请求 response = requests.get(pdf_links[i]) # 将响应内容读入到内存中 pdf_content = io.BytesIO(response.content) # 将PDF文件内容写入到本地文件中 with open(names[i] + '.pdf', 'wb') as file: file.write(pdf_content.read())

得到结果:

至此,批量爬取上海证券交易所绿色债券招募说明书已讲解完毕,需要的朋友可以自己跟着代码尝试一遍

【部分群限时免费进分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供招聘推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如风控建模。

请使用浏览器的分享功能分享到微信等