有个朋友想下载上海证券交易所的绿色债券招募说明书,如果一个一个手动下载,需要比较多的时间。跟我探讨是否可以用爬虫实现,研究了一段时间后,终于实现啦。本文提供批量爬取上海证券交易所绿色债券招募说明书的方法和全量代码。
一、导入库
首先导入爬虫需要的库,代码如下:
import os
import json
import time
import random
import pandas as pd
from captcha import *
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from 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,加时备注想进的群,比如风控建模。
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)
一文囊括风控模型搭建(原理+Python实现),持续更新。。。