1. 实验简介

在网上下载了一个单词Excel文件,里面只有一列单词,没有读音没有释义,那我不妨用爬虫自动从金山词典(https://www.iciba.com/)查词并且把读音和释义都爬取下来。使用selenium模拟查词的动作,再将单词的读音释义放入dataframe中,最后都储存到一个Excel文件中。

2. 实验过程

首先理清整个流程:

词典流程图

初步将此功能分为三个函数实现:从单词文件中提取单词的函数、遍历单词并储存查询结果的函数、查询一个单词并返回查询数据的函数。
从文件提取单词的功能采用xlrd库函数完成。

查询单词返回数据的函数用selenium方法如下:

  1. 使用Chrome浏览器模拟,打开网站:https://www.iciba.com/
  2. 找到查询框元素,向其中输入要查的单词
  3. 模拟回车按键,进入查询结果页面
  4. 分别找到单词、读音、释义的元素,提取其文本

初步按照此三个函数进行编写时,出现了问题,我一一进行优化:

  1. 以上方法编写,每查一个单词都需打开、关闭一次浏览器,非常耗时,于是将遍历单词功能和单词查询都放到一个函数中,只需打开一次浏览器,不停地进行查询即可;
  2. 如果不清空输入框,下一个单词查询时会接在上一个单词后面,查出错词,所以在每次循环前要清空输入框;
  3. 当查词网站查不到搜索的词时,就找不到对应的记录读音、释义的元素,为了防止程序运行时因为个别词语报错,所以在寻找读音释义元素处添加了异常处理;
  4. 当导入的单词表单词数量过多时,运行一次程序需要的时间很长,为了防止长时间运行出现错误,建议在主函数中间查询单词表切分成小部分,进行查询,写入Excel文件时传入不同的startrow参数,就可以实现追加功能。

3. 实验结果

本次实验的单词表中有1162个单词,从金山词典中爬取了1162条相关的读音和释义数据:

单词表结果

左图为从网上下载的单词表,右图为爬取了读音和释义信息的单词表(开头部分)


左图为从网上下载的单词表,右图为爬取了读音和释义信息的单词表(结尾部分)

4. 源代码

import os
import pandas as pd
import xlrdfrom selenium import webdriver
from selenium.webdriver.common.keys import Keys
import timedef check_word(wordlist):""":param wordlist: 查询的词表:return: worddf:dataframe, 带有注释和读音的单词表"""# 生成dataframeworddf = pd.DataFrame(columns=['word', 'pronouncation', 'meanings'])worddf.index = range(len(worddf))row = 0  # 插入dataframe的行driver = webdriver.Chrome()driver.get('https://www.iciba.com/')  # 打开欧路词典current_window = driver.current_window_handleprint("current window:", current_window)# 循环查询wordfor keyword in wordlist:input_search = driver.find_element_by_tag_name("input")input_search.clear()  # 要清除输入框的内容input_search.send_keys(keyword)  # 输入搜索词time.sleep(1)input_search.send_keys(Keys.ENTER)  # 回车time.sleep(1)current_window = driver.current_window_handleprint("current window:", current_window)word = {}# 如果网站没有相应地词则弹出错误,程序继续try:word['word'] = driver.find_element_by_class_name("Mean_word__3SsvB").textword['pronouncation'] = driver.find_element_by_class_name("Mean_symbols__5dQX7").text  # 读音word['meanings'] = driver.find_element_by_class_name("Mean_part__1RA2V").text  # 释义# 将查询数据写入dataframe当中worddf.loc[row] = [word['word'], word['pronouncation'], word['meanings']]row = row + 1except Exception as error:print(error)return worddfdef get_wordlist(filepath):""":param filepath: path of vocabulary file:return: words:list of words"""workbook = xlrd.open_workbook(filepath)sheet_1 = workbook.sheet_by_index(0)row_num = sheet_1.nrowswords = []iter = 3while (iter < row_num):words.append(sheet_1.cell_value(iter, 0))iter = iter + 1return wordsif __name__ == '__main__':filepath = os.path.dirname(os.path.abspath(__file__)) + r"\vocabulary.xls"wordlist = get_wordlist(filepath)df = check_word(wordlist)filepath_checked = os.path.dirname(os.path.abspath(__file__)) + r"\vocabulary_checked.xls"df.to_excel(filepath_checked)

用爬虫做字典(网络搜索作业):selenium+xlrd相关推荐

  1. 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)

    文章标题 一.Bs4搜索文档树 二.CSS选择器 三.selenium基本使用 四.无界面浏览器 五.selenium其他使用 1)自动登录百度案例 2)获取位置属性大小.文本 3)自动获取12306 ...

  2. python网络爬虫用到哪些技术_做Python网络爬虫需要掌握哪些核心技术?

    在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战.基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因.那么做Python网络爬虫需要掌握哪些核心技 ...

  3. 网络爬虫360手机助手搜索功能

    网络爬虫360手机助手搜索功能 关键字 jsoup 网络爬虫 360搜索 安卓开发 应用市场 用途 根据用户输入的关键字,通过网络爬虫技术获取360手机应用市场搜索结果列表,搜索结果包括:应用名.图标 ...

  4. python爬虫代码-python网络爬虫源代码(可直接抓取图片)

    在开始制作爬虫前,我们应该做好前期准备工作,找到要爬的网站,然后查看它的源代码我们这次爬豆瓣美女网站,网址为:用到的工具:pycharm,这是它的图标 ...博文来自:zhang740000的博客 P ...

  5. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...

  6. python爬虫 - python requests网络请求简洁之道

    转自:python爬虫 - python requests网络请求简洁之道 requests简介 requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到 ...

  7. 精通python网络爬虫-精通Python网络爬虫 PDF 高清版

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫.核心技术.框架.项目实战方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小108.6 MB,韦玮编写 ...

  8. 机器学习 | 网络搜索及可视化

    文章目录 1. 网络搜索 1.1 简单网络搜索 1.2 参数过拟合的风险与验证集 1.3 带交叉验证的网络搜索 1.3.1 Python 实现 1.3.2 Sklearn 实现 1.4 网络搜索可视化 ...

  9. python爬虫设计模式_Python3网络爬虫(一):利用urllib进行简单的网页抓取

    点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...

最新文章

  1. ejabberd mysql 搭建配置_ejabberd安装步骤+Mysql配置
  2. 遇见一款很受用的一个工具,推荐给各位程序员
  3. tkinter中button按钮控件(三)
  4. dotnet 在 UOS 国产系统上使用 Xamarin Forms 创建 xaml 界面的 GTK 应用
  5. Centos或者Redhet开通telnet
  6. er图用什么软件_工艺流程图用什么软件做?规范实用的流程图工具
  7. io hang linux 原理,Linux 避免IO hang
  8. RocketMQ如何应对每天1500亿条的数据处理
  9. 凯撒密码加密,解密的实现,可以在项目上使用
  10. php考试试卷,php测试题(一)
  11. 常见并发工具的使用和原理解析——Condition(重点在第五节)
  12. KITTI raw data 镜像地址
  13. MySQL-8.0.11-winx64.zip安装教程(Win10操作系统)
  14. seL4微内核操作系统初期总结 2018.10
  15. 半透明物体与深度写入
  16. vue实现不同页面显示不同标题
  17. Viz-artist常用脚本操作
  18. 漫画算法之基础数据结构
  19. java 飞翔小鸟源码
  20. 《安富莱嵌入式周报》第292期:树莓派单片机100M双通道示波器开源,MDK5.38发布,万用表单芯片解决方案,8通道±25V模拟前端芯片,开源贴片拾取电机板

热门文章

  1. 读书笔记《CSS权威指南》
  2. 中国十大金牌游戏策划
  3. Modbus协议的数据模型和地址模型,Modbus寄存器40001,30001是什么意思?
  4. hackthebox- Arctic (考点:ColdFusion安全/windows)
  5. 余弦相似性:找出相似文章
  6. Distinctive Image Features from Scale-Invariant Keypoints-SIFT算法译文
  7. 正则表达式、常用的匹配总结
  8. 搭建个人博客,东半球最强教程
  9. 搜狐邮箱怎么开启pop3服务器,各大中文邮箱POP3服务开启方法
  10. springboot中ElasticSearch入门与进阶:组合查询、聚合查询