作者:老王丫原文链接:
要求:这个问题是朋友让我帮忙完成一个区域教育公司的业务范围。现有信息:表中已经提供了公司名称和位置等信息。默认信息:但是业务范围还是没有。问题:因为数据量大,一个一个的,我要百度搜索,复制到表格里,有点重。我可能要花好几天的时间来吃或喝Ctrl c和Ctrl v,这显然不是一个好办法。解决方法:我们可以用python从excel中读出所有的公司名称,然后让它自动去网页,搜索公司的经营范围,批量回填到excel中。
当我得到这个问题时,我首先想到的是使用selenium自动化测试工具。你可以用这个工具模拟人工操作浏览器获取公司的经营范围,抓取得到的数据,批量填回excel中。
下载地址:注1:下载的chromedriver驱动必须匹配谷歌Chrome。注2:下载的文件需要放在python安装路径或脚本目录下(如图)。接下来,进行一个小测试。导入webdriver后,我们先用代码看看能不能打开浏览器。如果能正常打开,selenium安装配置没有问题。
首先,在编辑器中输入以下代码。你可以看到“谷歌浏览器”是自动打开的。只是一个小测试。下面就以访问百度为例做一个简单的说明。
可以看到浏览器打开成功,百度的页面也打开了。同时在输入框中自动输入“python”一词,搜索成功点击。
至于如何定位百度浏览器的输入框和搜索按钮的id,我们可以通过F12查看页面元素来获取信息。其实定位界面的方法有很多种,我们可以选择自己最喜欢最了解的一种。下面我列举了一些定位方法,你可以自己试试。
好吧!基本的搜索步骤差不多完成了。让我们言归正传。一般可以去百度口碑查询公司的经营范围。百度的口碑。
我们看到:这个查询是一个get请求,直接拼接了地址后面的查询条件,也就是说我们根本不需要通过模拟浏览器查询数据。我们直接请求这个地址就可以得到数据,工作量瞬间少了很多。哈哈哈哈,开始吧。因为我们直接请求地址来获得数据,所以解析获得的数据来获得我们想要的东西对我们来说是有好处的。这里我习惯用xpath解析,有兴趣的也可以用正则化等其他方法解析。我需要企业的经营范围信息,所以F12选择了经营范围元素,这就是我们想要的数据。右键单击该标签并选择复制选项-复制xpath,以复制该标签的XPath信息。要通过xpath解析页面内容,我们需要安装lxml模块和requests模块来text XPath=/html/body/div[2]/div/div[2]/div[1]/div/div[2]/span[5]/span[
得到的内容如下。但是仔细一看,这里得到的经营范围因为省略是不完整的。让我们看一下这一页,发现完整的信息在这一页外面的标签里。但是,此时我们无法通过使用text()来获取它,因此必须使用它来选择属性并获取数据内容中信息的修改代码。
我们已经可以得到一个单独的数据,然后我们可以进行批量操作。将查询的参数更改为可以从excel中读取的可变参数。我们先从excel中读取数据。我们开始吧。
看excel。我这里用的是xlrd模块。首先,安装它。我们把excel表格里的数据读出来,打印出来。表格信息大致如下
我们还读出了查询的参数。下面,我们可以先把这一块的代码合并成一个,批量获取经营范围数据。这里为了方便,我先不写一个独立的方法,直接把它们放在一起。
输出是一个数组,在excel表中存储所有公司的经营范围信息。现在数据已经可用,我们将把数据写入excel。要完善数据,首先要安装写excel的xlwt模块。我们的写入方法是复制写入的数据并覆盖,所以要安装xlutils模块才能使用它的复制方法。完整的代码如下
运行后可以发现excel中的业务范围已经有数据了,整个流程结束。今天到此为止。代码比较简单随意,主要是一个思路。我也是初学者。python只是我业余时间的爱好,不专业。如有错误,请指正,共同进步。