有个朋友想下载上海证券交易所的绿色债券招募说明书,如果一个一个手动下载,需要比较多的时间。
跟我探讨是否可以用爬虫实现,研究了一段时间后,终于实现啦
。
本文提供批量爬取上海证券交易所绿色债券招募说明书的方法和全量代码。
导入库
模拟登录上海证券交易所
定义获取单页所有绿色债券说明书的函数
写循环获取所有绿色债券说明书链接
获取招募说明书的数量并导出招募书链接
根据招募说明书链接下载全量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:passpage_pdf_link():获取单页所有绿色债券说明书的名称和下载链接函数。
然后点击下一页,循环获取所有页面中的pdf链接。
得到结果:
五、获取招募书的数量并导出招募书链接
接着获取招募说明书的数量,代码如下:
len(pdf_links)得到结果:
5030说明总计有5030个绿色债券说明书pdf文件。
然后导出绿色债券说明书pdf文件链接和对应名称,代码如下:
import pandas as pdimport osos.chdir('F:\公众号\89_爬上海证券交易所')date = pd.DataFrame(names, pdf_links)date.to_csv('links.csv', encoding='gbk')得到结果:
六、根据招募说明书链接下载全量pdf文件
最后根据绿色债券招募说明书的链接下载全量pdf,并根据招募说明书名称保存成对应的pdf文件,代码如下:
import ioimport requestsos.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,加时备注想进的群,比如风控建模。








