一次批量下载上交所公告pdf的尝试

大家平时可能有需要批量下载pdf的场景,小编会分享一下第一次尝试批量下载上交所公告的尝试历程。

1.导入爬虫必备的常用包

# -*- coding: utf-8 -*-
import requests #发送http请求
from bs4 import BeautifulSoup    #html解析器
import urllib.request
import os   #python文件/目录读取方法

2.构建list分别存放pdf的链接地址和pdf名称

def get_url_list():
    url_lists = []#存放pdf链接地址
    pdf_names=[]#存放名称
    url='http://www.sse.com.cn/disclosure/listedinfo/announcement/s_docdatesort_desc_2016openpdf.htm'#找出正确的pdf链接很重要
    html=requests.get(url)
    html.encoding='utf-8'
    soup=BeautifulSoup(html.text,'html.parser').find_all('a',class_="hidden-xs")#先打印出来返回的html.text之后,可以看到(文末有图)pdf连接,带有a标签,和class="hidden-xs"的属性,所以可以这样用bs4,找出PDF链接地址所在

    for k in soup:
        url_list=k['href']# 获取pdf链接,连接一般带href标签
        pdf_name=(k['title'])#获取pdf名称
        url_lists.append(url_list)#链接list
        pdf_names.append(pdf_name)#pdf名称
    return url_lists,pdf_names

get_url_lists=get_url_list()#调用函数,返回

3.PDF content获取与文件保存和下载

def getFile(url=[],filename=[]):
    for i,k in zip(url,filename):
        r = requests.get(i)
        fo = open(k.replace('*','')+'.pdf', 'wb')  # 注意要用'wb',这个地方有坑,有些带*的名称会导致报错,需要替换掉
        fo.write(r.content)  # r.content -> requests中的二进制响应内容:以字节的方式访问请求响应体,对于非文本请求
        fo.close()

        print ("Sucessful to download" + " " + k+'.pdf')#打印成功下载

#print(os.getcwd())
#os.mkdir('pdf_download)
os.chdir(os.path.join(os.getcwd(), 'pdf_download'))#创建目录
getfile=getFile(get_url_lists[0],get_url_lists[1])#文末有图,可以看到下载成功的界面
找出pdf链接规律.PNG

下载结果.PNG

你可能感兴趣的:(一次批量下载上交所公告pdf的尝试)