前两天,刘先生跟我提了这样一个需求:我有一个excel表格,里面包含了一些单位名称,我需要获取它们对应的18位“统一社会信用代码”。由于单位数量较多,一个一个去企查查、天眼查或者统一社会信用代码官网查询比较耗时,而且都是重复性劳动耗着一个人不划算。刚好我会爬虫,就想写一段代码来用机器代替人工完成这个任务。
写爬虫之前先选择工具,我这里使用的是Selenium。Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器)。Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。本文中浏览器使用的是Chrome,所以需要提前下载安装ChromeDriver。下载地址:http://chromedriver.storage.googleapis.com/index.html 。需要根据自己的浏览器版本下载对应的ChromeDriver。将下载好的文件解压,然后放到你使用的python解释器相同的目录下即可。
在经过反复调试后我的代码完成了。代码分为4个部分,分别为程序主入口,读取excel、结果写入excel和爬虫。
首先看一下读取excel部分
def get_excel_data(sheetName, row, col=0):
'''
从excel中读取data
:param sheetName: 工作表名称
:param row: 行号
:param col: 列号,默认取第0列
:return: 工作表sheetName的第row行col列的值
'''
excelDir = './data/单位名称.xls'
# 创建工作薄
workBook = xlrd.open_workbook(excelDir)
# 选择工作表
workSheet = workBook.sheet_by_name(sheetName)
return workSheet.cell(row, col).value
需要说明2点:
1.excel表的行和列是从0开始计算的;
2.“./data/单位名称.xls”是在当前目录下有个data文件夹,里面放置的是要读取的excel文件
其次,结果写入
def set_excel_data()