今天记录利用selenium从excel中读取内容,将内容输入到谷歌浏览器中,并搜索得到结论数,然后再将结论数写入excel中的案例。

思路:
1,利用selenium模拟用户操作浏览器,由于是繁体成语,且是在谷歌浏览器中进行搜索,先开启代理,然后将谷歌浏览器默认语言设置为中文繁体(设置->高级->语言),同时在谷歌浏览器的主页,还要将浏览器页面的展示设置为繁体;

2,设置完之后,关闭Chrome浏览器,进入电脑C:\Users\AppData\Local\Google\Chrome路径下,复制一份User Data命名为User Data1,这样在selenium操作浏览器时调用User Data1的路径,即能保证测试浏览器保持繁体的配置,又不影响本身谷歌浏览器的使用(如果直接使用User Data,又在人工使用谷歌浏览器,会有端口占用的报错)

opt = webdriver.ChromeOptions()
opt.add_argument(f"--user-data-dir={os.path.expanduser('~')}\\AppData\\Local\\Google\\Chrome\\User Data1")
# 通过--user-data-dir=的方式来使得chromedriver的配置和本地浏览器相同(本地已设置浏览器语言为繁体,需要保留这个配置)
s = Service('chromedriver.exe')
# 将chromedriver.exe放到脚本所在路径下,方便selenium操作浏览器时不影响本地原本浏览器的使用

3,然后就是调用excel表格,读取表格中的成语,然后搜索成语的释义,近义词等,再将这些结果写入新的excel表格:
4,为了防止爬取过程中网络不稳定或者其他原因导致第一次爬取失败,增加了重试机制和断点续传,重试机制为了防止第一遍爬取失败,断点续传用于避免爬取失败后,已爬取过的数据不用再次爬取。具体实现流程见代码注释

全部代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from bs4 import BeautifulSoup
import os
import timedef chrome_search(find_word,isFirst):try:search_box = browser.find_element(By.NAME,"q")search_box.clear()# 每次输入成语查询完之后,需要清空一下搜索框if isFirst:search_box.send_keys(find_word + Keys.ENTER)#本来想每次都用ENTER键来搜索,但是貌似ENTER键的方式不是特别推荐,具体原因有空研究后再补充;else:search_box.send_keys(find_word)search_btn = browser.find_element(By.XPATH,"//*[@id="tsf"]/div[1]/div[1]/div[2]/button/div")search_btn.click()# 这里没有全部用find_element查找搜索按钮的原因是,第一次启动浏览器在Google主页搜索时的搜索按钮不一样,但是由于主页搜索只用到一次,所以单独处理成了+ Keys.ENTER的方式time.sleep(1)browser.refresh()# 由于实际运行过程中,网络不是很稳定,第一遍查询总是未查询到,增加一个刷新步骤,增加页面加载成功率WebDriverWait(browser,10).until(EC.presence_of_element_located((By.XPATH,"//div[@id='result-stats']")))# 想要页面加载后在页面定位元素,尽量用EC.presence_of_element_located的方法# 一开始用的WebDriverWait(browser,10).until(EC.title_contains(find_word)),从标题中去定位,会比较容易在页面还没加载出来的时候,找不到元素而报错bsobj = BeautifulSoup(browser.page_source,feature='lxml')# 这里改成xpath定位应该更美观,就可以不必用到BeautifulSoup依赖了,但是懒得改了count_text = bsobj.find('div',{'id':'result-stats'})a1 = count_text.text.split('結果')[0]# 用結果分割,丢弃掉后面的(搜尋時間:0.47 秒) 中的数字a2 = filter(lamda s:s==',' or s.isdigit(),a1)# 匹配结果时,保留页面的结论数表示法,不要漏掉数字间的逗号count = (''.join(a2))print(count)time.sleep(1)return countexcept:return -1if __name__ == '__main__':opt = webdriver.ChromeOptions()opt.add_argument(f"--user-data-dir={os.path.expanduser('~')}\\AppData\\Local\\Google\\Chrome\\User Data1")# 通过--user-data-dir=的方式来使得chromedriver的配置和本地浏览器相同(本地已设置浏览器语言为繁体,需要保留这个配置)opt.add_experimental_option('excludeSwitches', ['enable-automation'])# 通过'enable-automation'的方式,可以在selenium操控浏览器时,去掉顶部的“chrome正受到自动测试软件的控制”字样# opt.add_argument("--headless")# 无头浏览模式,这样不会打开浏览器去搜索,是最基础的防止被浏览器检测的方法opt.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36')s = Service('chromedriver.exe')# 将chromedriver.exe放到脚本所在路径下,方便selenium操作浏览器时不影响本地原本浏览器的使用desired_capabilities = DesiredCapabilities.CHROMEbrowser = webdriver.Chrome(service=s,option=opt,desired_capabilities=desired_capabilities)# desired_capabilities 可以使得get直接返回,不再等待界面加载完成browser.get('https://www.google.com.hk/')browser.implicitly_wait(10)# 隐性等待:在10秒内网页是否加载完成,如果完成了,就进行下一步;如果没有在10秒内加载完成,则会报超时加载。不用强制等待init_df = pd.read_excel('t3066.xlsx',usecols=['成语'])# 导入脚本所在路径下t3066.xlsx表格,并定义init_df对象chengyu_list = list(init_df['成语'])isFirst = Trueword_list = ['釋義', '出處', '例句', '近義詞', '反義詞']# 将成语后的后缀放在一个list下doneList = list()# done.txt用于记录已爬取过的词语,已爬取过的成语写入该文件,如果运行失败或者再次运行,通过done.txt进行查询,已经爬取过的词语则不再二次爬取with open("done.txt","r+",encoding="utf-8") as f:for line in f.readlines():doneList.append(line.strip())print(doneList)for key_word in chengyu_list:for back_word in word_list:reloadnum = 0word_search = key_word + back_word# 按照“成语+释义”的方式搜索if word_search in doneList:continuesearch_count = chrome_search(word_search,isFirst)if search_count == -1:if reloadnum <= 5:search_count = chrome_search(word_search,isFirst)reloadnum = reloadnum + 1# 失败重试5次,如果5次都失败,则continue跳过该成语继续运行,后面再跑一次查询到该未搜索成功的成语,交给done.txt再次查询一次即可continueinit_df.loc[init_df.成语 == key_word,back_word] = search_countisFirst = Falseinit_df.to_excel('t3066new.xlsx')# 将结果写入新的表格with open("done.txt","a+",enconding="utf-8") as f:# a+表示追加,才不会覆盖之前的数据f.writelines(word_search + "\n")browser.quit()print('over!')

python+selenium从excel读取成语到谷歌搜索得到搜索结论数相关推荐

  1. Python实现从excel读取数据并绘制成精美图像

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Pyth ...

  2. python 读取excel太慢_实用技巧——Python实现从Excel读取数据并绘制成图像

    喜欢编程,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远! 本文主要阐述如何使用python从excel读取数据,并用matplotlib绘制成二维图像. 主要知识点为 ...

  3. 实用技巧——Python实现从Excel读取数据并绘制成图像

    本文主要阐述如何使用python从excel读取数据,并用matplotlib绘制成二维图像. 主要知识点为: 使用xlrd扩展包读取excel数据 使用matplotlib绘制二维图像 美化图像,添 ...

  4. 自动化办公:2、Python自动化之Excel读取表格+设置样式

    Python自动化之Excel 方法一:应用pip执行命令 安装openpyxl模块pip install openpyxl 方法二:在Pycharm中:File->Setting->左侧 ...

  5. python + Selenium 自动化实现读取网易邮箱验证码

    前面写到了一些关于python+Selenium的基础操作 的教程,这篇文章将讲解一些实战内容. 在自动化工作中,有可能会遇到一些发送邮箱验证码类似的功能,如下 我们一般的解决思路就是 : 发送邮件- ...

  6. python selenium span内容读取_【程仁智推荐】Selenium自动化测试入门

    LupuX 2017-06-18 14:24:28  11853  收藏 41 分类专栏: Auto Test 文章标签: 自动化测试 selenium web测试 UI自动化 版权 一.什么是Sel ...

  7. python selenium 爬虫 网站seo刷流量 第一篇:百度搜索

    做SEO的同学和各位站长都知道,网站的原创内容在被大量收录后,适当的做一点白帽的刷流量,对于网站关键词排名提升还是有些好处的,本篇就先介绍一个用百度搜索来刷流量的简单Demo. 一.Demo系统设计思 ...

  8. python+selenium环境安装及配置

    參考:python+selenium环境安装及配置 https://blog.csdn.net/tyx199397/article/details/79268111 Selenium_HTMLTest ...

  9. Python+selenium 自动化-读取excel记录的脚本执行登陆操作实战演示

    我们可以用 excel 来记录自动化,然后读取 excel 来执行命令,excel 可以很方便直观的管理我们录入的自动化.下面给大家演示一下 Python+selenium 自动化的实例,读取 exc ...

  10. python处理表格数据教程_python利用Excel读取和存储测试数据完成接口自动化教程...

    http_request2.py用于发起http请求 #读取多条测试用例 #1.导入requests模块 import requests #从 class_12_19.do_excel1导入read_ ...

最新文章

  1. 两个点 定位_深圳Mark点定位的一般原理与步骤
  2. java二叉排序树动态查找表_9.3.1动态查找表—二叉排序树
  3. 第九周项目实践3 利用二叉树遍历思想解决问题
  4. 使用tensorflow书写逻辑回归
  5. 【oracle】查看数据库最近执行了哪些sql语句
  6. 首都师范 博弈论 5 4 4 多人合作博弈问题 Shapley计算之财产分配问题
  7. slic3r prusaslicer编译
  8. thinkphp5项目--个人博客(五)
  9. VS2010 保护视力 背景色设置
  10. LintCode 吹气球
  11. 小杜机器人线下店_百度AI小度机器人IP营销
  12. pc端生成支付宝支付二维码
  13. DBFS解二阶魔方——一次c++学习之旅
  14. C语言:调整数组顺序使其奇数位于偶数前面
  15. FPGA实战操作(2) -- PCIe总线(协议简述)
  16. 什么是人力资源管理系统?hr系统功能介绍
  17. 【Numpy】改变数组维数
  18. 葵花宝典 十八 内置对象
  19. P2P网络电视须跨6道坎 包括网络不可控问题
  20. Oracle EBS R12开发工具安装

热门文章

  1. 51单片机c语言开发工具keil安装
  2. GIS应用技巧之空间插值
  3. Kali安装AWVS
  4. LM393低功耗双电压比较器参数、引脚、应用详解
  5. C语言大数运算-大数运算库篇
  6. 【总结】学了不少自然语言处理的理论知识,如何通过实战进一步提高能力?...
  7. (一)Latex源文件的基本结构
  8. 【C++沉思录】代理类
  9. Python-计量经济学案例
  10. ie8打不开java项目_IE8点击打开没反应,尝试多种方法始终打不开