最近,因为工作需要,需要查询大量公司是否为HDMI会员,我看到数千的公司名,要查完可能需要不少时间和精力。
那有没有什么方法能让电脑自动帮我查询呢?这时候,我突然想到了自己懂一些Python知识,不如写个爬虫吧。
我们先来分析项目需求:
现在有很多家公司需要查询,那么我们先把一家公司查询出来,然后我只需要将Excel表格中的公司名转换成列表做循环就可以查出所有的公司。
所以,我们的重点需求是放在如何进行单次的查询,并得到我想要的结果。
明确了需求,开干!!!
一、我首先想到了Web自动化测试
# 初始化Chrome浏览器
driver = webdriver.Chrome()
# 打开测试页面
driver.get('https://www.hdmi.org/adopter/adoptersaffiliates_cn')
二、通过检查网页我们可以很容易锁定搜索框的位置
到目前为止,我们完成了自动搜索“一”家公司这个步骤。
# 在搜索框输入要搜索的公司名
driver.find_element(by=By.ID, value="adopters").send_keys(公司名)
到这一步后我们要怎样去判断公司是否是HDMI会员呢?
我们不妨换个角度思考,我们想要的结果无非就是是HDMI会员或者不是HDMI会员。我们先假设搜索的公司是HDMI会员,我们可以看到这时搜索框下面就会弹出让我们点击进入该公司采纳会员的详情界面。
那我们是否,可以让程序“点进去”看一下呢?当然是可以的。
# 点击HDMI会员公司,进入详情
driver.find_element(by=By.ID, value="adopters_listbox").click()
我们现在是建立在假设“公司是HDMI会员”的基础上的,那如果不是的话,那我们的程序就会报错。我们是否可以利用这个错误呢?相信到这里聪明的小伙伴已经领会到了意图。回归我们的初衷,我们只是需要“是”或“否”,我们并不需要获取html内的其他内容。
try:
# 可能会出现错误的代码
driver.find_element(by=By.ID, value="adopters_listbox").click()
print('log' + comp_anys[i] + ":是HDMI会员")
except:
print('log' + comp_anys[i] + ":不是HDMI会员")
到这里一次判断基本上已经完成,我们接下来要做的是把结果写入Excel表格中,我们只需要写一个专门写入Excel的函数就可以了,具体代码怎么实现比较简单我这里就不阐述了。
要批量查询的话可以将Excel表格中的数据转换成列表,然后循环替换公司名即可,这里建议将写入放入查询的循环中,因为这样效率虽然慢了不少,但是可以防止程序中途终止需从头再来的尴尬问题。
还有要注意的是:每次搜索完一个要执行一次清空搜索框。不然会直接在上一个搜索的公司名后直接添加本次搜索公司名。
driver.find_element(by=By.ID, value="adopters").clear() # 清空搜索框
我们还可以根据需求添加其他功能,例如在所有搜索完成后将搜索结果发送到自己邮箱等操作等。
需要完整的代码和打包好的可执行文件,可以在评论区留言!
注:本文仅供参考学习,请勿将技术应用于不好的方面,如有侵权,立即删除。