代码下载

点击此处下载代码



本文B站视频

https://www.bilibili.com/video/BV1AE411r7ph



一、知识准备

  1. python语法基本知识 https://www.bilibili.com/video/BV1eb411h7sP/
  2. python网络爬虫 https://www.bilibili.com/video/BV1AE411r7ph/


二、网址规律分析

2.1 上交所

上交所多为GET请求方法,伪码

import requests

url = '上交所网址规律'
headers = '你的浏览器useragent(带referer)'
cookies = '你的cookies'
resp = requests.get(url, 
                    headers=headers, 
                    cookies=cookies)

2.2 深交所

深交所多为POST请求方法,伪码

import requests

url = '深交所网址规律'
headers = '你的浏览器useragent(带referer)'
cookies = '你的cookies'
param = 'form data构造的字典,补全网址规律'

resp = requests.get(url, 
                    headers=headers,
                    cookies=cookies, 
                    data=param)



三、定位pdf相关数据

访问得到的结果均为json数据,解析定位方法可使用python的字典方法。



四、存储数据

几千个pdf数据量很容易达到1000+M,如果长时间自动下载容易失败。

建议先获取所有公司相关信息,存储到csv中。

后续再单独使用pandas读取,逐一下载pdf。

注意,这里推荐使用csv新的语法

with open('你的csv文件路径', 'w', encoding='utf-8', newline='') as csvf:
    #csv文件内的字段名
    fieldnames = ['title', 'date', 'link', 'content']
    writer = csv.DictWriter(csvf, fieldnames=fieldnames)
    writer.writeheader()
    #访问
    url = '网址'
    resp = requests.get(url,....)
    #定位
    for company in resp.json()['data']:
        #解析数据
        row = dict()
        row['title'] = '采集到的标题'
        row['date'] = '采集到的日期'
        row['link'] = '采集到的pdf链接'
        row['content'] = '采集到的内容'
        
        #写入csv
        writer.writerow(row)



五、批量下载pdf

以深交所为例,已经采集到深圳交易所.csv,现在下载只需要执行

## 下载
import requests
import pandas as pd

def download(link, fpath):
    """
    下载多媒体及文件
    link: 多媒体文件链接(结尾有文件格式名)
    fpath: 存储文件的路径(结尾有文件格式名)
    """
    
    resp = requests.get(link)
    #获取到二进制数据
    binarydata = resp.content
    #以二进制形式将数据流存入fname中
    with open(fpath, 'wb') as f:
        f.write(binarydata)
        
df = pd.read_csv('深圳交易所.csv')
for title, link in zip(df['title'], df['link']):
    fpath = '深圳/{title}.PDF'.format(title=title)
    download(link, fpath)



广而告之