目录

  • 1、需求背景
  • 2、代码实现
    • 2.1、实现方法1
      • 2.1.1、实现思路
      • 2.1.2、代码演示
    • 2.2、实现方法2
      • 2.2.1、实现思路
      • 2.2.2、代码演示
  • 3、拓展知识

1、需求背景

表哥从事某公司的物流管理工作,说公司系统的历史快递的物流信息丢失了,数据接近15万条…原本是系统直接对接信息,但因开发人员没缓存,导致19年前的数据丢失,快递公司后台端口也给迭代了,现在只能在快递公司人工客服里面查询,把结果保存下来。悲剧的是公司系统开发人员离职了,这个锅就落到表哥头上了,现在他需要做的是复制快递单号到对应的客服网站,点击查询,然后将查询结果保存下来,面对接近15万条这么庞大的数据,那得查询到猴年马月去了…这不就找我来帮忙了,话不多说,接下来看看具体的实现思路和代码演示

2、代码实现

需要查询的快递单号:Express_number.xlsx,存放在ExpressInquiry项目的Data文件夹下,部分数据存储截图如下:

访问地址为:http://online.yto.net.cn/?view=index.html
查询结果截图如下:

查询API响应内容如下:

下面会写到两种实现方法:
方法1:查询结果通过截图方式保存下来
方法2:查询结果通过文本方式保存至Excel文件
表哥真正的需求是想要截图保存,即方法1,因本文主要的目的是想写写Python中的xlrd和openpyxl库,对Excel的读写操作方法,所以增加了方法2的代码实现

2.1、实现方法1

2.1.1、实现思路

用xlrd读取Excel文件数据,结合selenium的webdriver模拟UI界面操作,用截图方法driver.get_screenshot_as_file(filepath) 保存查询结果

2.1.2、代码演示

# 文件名:save_screenshot.py
import xlrd
from selenium import webdriver
import os
import time
from selenium.webdriver.chrome.options import Options"""读取excel文件"""
def read_excel(xls_name,sheet_name):worksheet = xlrd.open_workbook(xls_name)sheet = worksheet.sheet_by_name(sheet_name)rows = sheet.nrowsrow_content = []for i in range(rows):cell = sheet.cell_value(i,0)row_content.append(cell)return row_content"""
chrome无头浏览器,打开网站
参数:浏览器窗口宽度、高度、网址
"""
def open_browser(scroll_width,scroll_height,url):chrome_options = Options()chrome_options.add_argument('- -headless')chrome_options.add_argument('- -disable-gpu')driver = webdriver.Chrome(chrome_options=chrome_options)driver.set_window_size(scroll_width, scroll_height)driver.get(url)return driver"""发送快递单号查询"""
def send_ExpressNo(num):driver.find_element_by_xpath('//*[@id="text"]').send_keys(num)driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[2]/div/div/input[1]').click()time.sleep(2)"""截图并保存"""
def insert_img(driver,filepath):driver.get_screenshot_as_file(filepath)if __name__ == '__main__':# chrome无头浏览器,打开网站driver = open_browser(1920,888,'http://online.yto.net.cn/?view=index.html')# 遍历获取到的excel数据for num in read_excel(r'F:\ExpressInquiry\Data\Express_number.xlsx', '1-10000条'):save_path = '../Screenshot/1-10000条'if os.path.exists(save_path) == False:os.mkdir(save_path)filepath = save_path + '\\' + str(num) + '.png'if os.path.exists(filepath) :continue# 发送快递单号查询send_ExpressNo(num)print('发送快递单号 {} 查询'.format(num))# 截图并保存insert_img(driver,filepath)print('快递单号 {} 截图保存成功!'.format(num))# 关闭浏览器driver.quit()

2.2、实现方法2

2.2.1、实现思路

用openpyxl读取Excel文件数据,结合requests请求查询API,将查询结果回填到Excel

2.2.2、代码演示

# 文件名:save_text.py
import openpyxl
import requests
import json
import redef ExpressSearchAndSave(xls_name,sheet_name):"""读取excel文件"""wb = openpyxl.load_workbook(xls_name)ws = wb.get_sheet_by_name(sheet_name)sheet = wb.activea_column = ws['A']# print(a_column)for cell in a_column:express_no = cell.value"""发送快递单号查询,获取响应内容"""headers = {"Content-Type": "application/json;charset=utf-8"}data = {"action": "CHATING", "question": express_no, "userId": "fewqim8jk1"}from_data = json.dumps(data)  # 提交的参数需要是json类型,所以POST请求携带的数据需要序列化一下json.dumps(data)r = requests.post('http://online.yto.net.cn/api/robot/chat', data=from_data, headers=headers)response = r.json()search_result = response['data']['content']"""将获取到的响应内容,写回excel对应快递单号所在行"""new_cell = str(cell)   a_num = re.search(r"<Cell '22'.A(.*)>", new_cell).group(1)   # 用正则获取cell单元格的序号值ws['C{}'.format(a_num)] = search_resultprint('当前是第 {} 个单元格,获取到的快递单号是:{},查询结果写入成功!\n=========================================================================='.format(a_num,express_no))"""保存excel文件"""wb.save(r'F:\ExpressInquiry\Data\Express_number.xlsx')if __name__ == '__main__':ExpressSearchAndSave(r'F:\ExpressInquiry\Data\Express_number.xlsx','1-10000条')

3、拓展知识

Python读写Excel的库有很多,本文选取的是xlrd和openpyxl
xlwings:简单强大,可替代VBA
openpyxl:简单易用,功能广泛
pandas:使用需要结合其他库,数据处理是pandas立身之本
win32com:不仅仅是Excel,可以处理office;
Xlsxwriter:丰富多样的特性,直接创造一份美观大方的Excel,代码即一切;
DataNitro:作为插件内嵌到Excel中,可替代VBA,在Excel中优雅的使用python
xlutils:结合xlrd/xlwt,老牌python包,需要注意的是你必须同时安装这三个库xlrd、xlwt、xlutils
xlrd- 读取 Excel 文件
xlwt- 写入 Excel 文件
xlutils- 操作 Excel 文件的实用工具,如复制、分割、筛选等

更多关于以上库的对比和详细使用可参考:
1、Python处理Excel模块的对比分析
2、Python开发 之 Python3读写Excel文件(较全)

通过Python读写Excel,实现爬虫的两个方案相关推荐

  1. Python读写Excel表格,就是这么简单粗暴又好用(文末免费送资料)

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理. 以前正好在一本书上看 ...

  2. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用

    Python读写Excel表格,就是这么简单粗暴又好用 2019-04-18 13:45:31 11点赞 107收藏 1评论 最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开 ...

  3. python简单代码编写-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel――xlrd 2.python写excel――xlwt 1.读excel数据,包括日期等数据 ...

  4. python读取excel表格-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel--xlrd 2.python写excel--xlwt 1.读excel数据,包括日期等数据 ...

  5. .bin 文件用excel文件打开_用PYTHON读写excel文件

    1 实际案例 问题内容:数据格式为xls,xlsx,是一种常用的电子表格. 小学某班级成绩,记录在excel文件中: 姓名 语文 数学 外语 李磊 95 99 96 韩梅 98 100 93 张峰 9 ...

  6. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...

  7. 超实用的python技巧:python读写Excel表格的实例代码(简单实用)

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要介绍了python读写Excel表格的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可 ...

  8. Python读写Excel表格,就是这么简单粗暴又好用

    python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库 Python写excel--xlwt Python写excel的难点不在构造一个wo ...

  9. python: 读写excel文件

    文章目录 python 读写 excel 文件 Excel 文件简略描述 xlwt xlrd xlutils 读写 xlrd 读取 xlwt 写 xlutils 任务练习 python 读写 exce ...

最新文章

  1. python 微积分_《用 Python 学微积分》笔记 2
  2. 测试邮件系统需要做的准备工作
  3. 数据结构--链表--LRU缓存
  4. 葡萄城 SpreadJS 表格控件 V11 产品白皮书
  5. Android开发笔记(一百一十九)工具栏ToolBar
  6. ssis合并连接链接键_在SSIS包中使用合并联接转换
  7. 没想到,我能这么细心地看算法
  8. 带你了解HTTP协议(二)
  9. Win7连接蓝牙4.0鼠标
  10. 陈强老师公开课笔记3——中介效应的Stata操作
  11. 在AD中设置漫游配置文件与文件夹重定向
  12. linux路由登录密码忘记,路由器重置密码
  13. ring3下穿透磁盘还原技术揭秘
  14. 如何虚拟机里安装win7操作系统
  15. 世界上第一个便便数据库需要您的帮助!【智能快讯】
  16. 阻止某个程序上网-------防止孩子看抖音快手等视频网站
  17. BUG日志:无法解析的外部符号 _Direct3DCreate9
  18. matlab动态神经网络进行时间序列预测分析
  19. 拍照手机名词术语小常识
  20. 期货python入门书籍_期货基础书籍有哪些?

热门文章

  1. 前续和后续字符 C语言,基于数据类型完善的C语言课程改革研究
  2. 解决“spring-boot-maven-plugin”报红
  3. SSA麻雀算法-LSTM-优化神经网络神经元个数-dropout-batch_size
  4. 静态存储区与动态存储区
  5. ae制作的mg如何用到html,AE实战案例教程:如何制作MG动画
  6. 【Class 19】【实例】python 爬虫简单案例实现
  7. SOME/IP协议详解「2.0·服务化通信概述」
  8. Matlab创建二维图,三维图基本操作
  9. minix3通过pkgin_cd安装二进制包
  10. IList和List解惑