python操作excel及爬取美赛证书

今天美赛成绩出来了,S奖,有点遗憾。但工作还是要继续,因为要下载校队的获奖证书,所以使用python爬虫来爬取证书,省点事。

python操作excel

在这里我选择pandas库来操作excel,详情见http://pandas.pydata.org/pandas-docs/stable/user_guide/io.html?highlight=excel#writing-excel-files

主要有:

  • ReadFile类

  • WriteFIle类

  • read_excel(path, sheet_name)

    path指定excel文件路径,sheet_name指定操作的工作表(一个或多个)

  • to_excel(path,sheet_name)

    path指定excel文件路径,sheet_name指定操作的工作表(一个或多个)

例:

xlsx = pd.ExcelFile('path_to_file.xls')
df = pd.read_excel(xlsx, 'Sheet1') 

上面的例子中我们得到了一个DataFrame类型数据df,接下来的操作就简单很多了(DataFrame常规操作)

比如我们获取df的第一行第二列的数据:
df.ix[0,1].values
获取第五列:
df.ix[:, 4].values   得到一个列表
爬取美赛证书代码
"""
爬取美赛校队获奖证书,并以控制号命名
control_number_excel_file_path为含有控制号的excel文件
默认存储路径为桌面美赛论文文件夹,故需要在桌面新建“美赛论文”文件夹缺少异常处理
没有提供对外接口
"""
import requests
import pandas as pdclass CMcmCertificateCrawler():def __init__(self):self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/73.0.3683.103 Safari/537.36'}self.control_number_excel_file_path = "C:\\Users\\lenovo\\Desktop\\2019美赛校队-控制号.xls"def FReadControlNumber(self):# 获取excel文件中的控制号xlsx = pd.ExcelFile(self.control_number_excel_file_path)col = pd.read_excel(xlsx, sheet_name='Sheet1')control_numbers = (col.ix[:, 4].values)return control_numbersdef FGetResponse(self):for control_number in self.FReadControlNumber():url = "http://www.comap-math.com/mcm/2019Certs/" + str(control_number) + ".pdf"response = requests.get(url=url, headers=self.headers)print(response.status_code)return responsedef FSavePDF(self, control_numbers):# 下载证书PDFtry:for control_number in control_numbers:path = "C:\\Users\\lenovo\\Desktop\\美赛证书\\" + str(control_number) + ".pdf"f = open(path, 'wb')response = self.FGetResponse()f.write(response.content)print(str(control_number) + ".pdf" + "存储成功")except Exception:print("Exception")if __name__ == '__main__':mcc = CMcmCertificateCrawler()control_number_list = mcc.FReadControlNumber()mcc.FSavePDF(control_number_list)

本文链接:https://my.lmcjl.com/post/10279.html

展开阅读全文

4 评论

留下您的评论.