Python 实现信息自动配对爬虫排版程序


Python 实现信息自动配对爬虫排版程序

文章插图
作者 | 李秋键
责编 | 晋兆雨
头图 | CSDN付费下载自视觉中国
在很多的公司项目中,常常有很多对office项目的比较机械化的操作,在这里就可以借助Python实现对office的合理排版 。而这里我们就将借助海尔公司的出货表爬取对应图片信息,并重新排版成为更加合理的Excel布局 。
而今天我们这个项目是来自于实际生活中真实存在的处理事件 。海尔在国外的员工常常要处理一些进出货的表格统计,但是由于国外人很多不大精通汉字,故常常要通过给出的汉字在网上搜索图片,然后复制到表格中以方便国外人能看懂是什么货物,并加上拼音有助于理解 。相对以往而言,由于货物清单任务量很大,常常需要大量时间人力而且容易出错,故我们这里设计了个程序使得这一项任务完全可以由电脑自动完成,不仅速度极快,而且不需要浪费人力和精力,提高了生产效率 。
Python 实现信息自动配对爬虫排版程序

文章插图
 
实验前的准备其中海尔给出的货物清单的Excel在4.xlsx中,数据如下:
Python 实现信息自动配对爬虫排版程序

文章插图
Python 实现信息自动配对爬虫排版程序

文章插图
代码总体框架
整体的程序框架分为两个重要部分 。一个部分是用来爬取数据,另一个用来排版成美观的Excel 。如下详解:
1 爬取数据并保存
如download.py程序可见 。
首先我们流程是从Excel读取数据、然后借助百度图库搜索图片,并爬取保存 。
2 Excel排版和拼音注释
如xls.py可见 。根据下载下来的图片和文字及其拼音保存排版 。
Python 实现信息自动配对爬虫排版程序

文章插图
第三方库介绍
  1. Xlrd库:用来读取和保存Excel表格,更方便读取数据
  2. Pypinyin库:用来把汉字转为拼音,这里我们需要将它准成有音素的拼音
  3. Xlsxwriter库:用来读取和保存Excel表格,其可以更好地保存格式
  4. Requests库:Requests 是用Python语言编写,基于 urllib,采用Apache2 Licensed 开源协议的 HTTP 库 。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求 。
  5. Re库:正则表达式匹配
  6. Pillow库:读取图片
  7. Urllib库:用来网络爬虫处理
  8. Socket库:数据包处理
  9. Openpyx库l:openpyxl是一款比较综合的工具,不仅能够同时读取和修改Excel文档,而且可以对Excel文件内单元格进行详细设置,包括单元格样式等内容,甚至还支持图表插入、打印设置等内容,使用openpyxl可以读写xltm, xltx, xlsm, xlsx等类型的文件,且可以处理数据量较大的Excel文件,跨平台处理大量数据是其它模块没法相比的 。因此,openpyxl成为处理Excel复杂问题的首选库函数 。在使用openpyxl前先要掌握三个对象,即:Workbook(工作簿)、Worksheet(工作表)和Cell(单元格,存储具体的数据对象)三个对象 。
  10. Time库:用来每次爬取数据的适当延迟,以防止网站封掉ip 。
  11. Os模块:用来本地文件和文件夹的读取和生成等等 。

Python 实现信息自动配对爬虫排版程序

文章插图
代码
在download程序中,首先是根据给出的Excel表读取数据,代码如下:
首先是设置编码格式和导入所要使用到的库:
#encoding=utf-8importxlrdfrompypinyin import lazy_pinyin,pinyinimportxlsxwriterimportrequestsimport osimport refrom PILimport Imageimporttimefromurllib import requestfromurllib import errorimportrandomimportsocket接着设立文件名变量方便保存和读取 。设立爬虫包的延迟时间为20s 。
#改文件名的地方excel_address="4.xlsx"socket.setdefaulttimeout(20)为了防止反爬的问题,设立请求头
header ={'User-Agent': 'Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml,like Gecko) Chrome/63.0.3239.132 Safari/537.36'}接着使用xlrd库读取Excel表格,按照列对象读取数据
workbook= xlrd.open_workbook(excel_address)sheet =workbook.sheet_by_name("Sheet1")col0 =sheet.col_values(0) # 获取第1列内容,序号那一列


推荐阅读