网页抓取数据百度百科(实践应用类(非知识讲解)本文介绍库和chrome浏览器)
优采云 发布时间: 2021-11-10 14:14网页抓取数据百度百科(实践应用类(非知识讲解)本文介绍库和chrome浏览器)
概括
最后更新:2020.08.20(实验部分待更新)
本文类型:实际应用(非知识讲解)
本文介绍了selenium库和chrome浏览器自动抓取网页元素,定位并填写表单数据,可以实现自动填写,节省大量人力。为了方便使用selenium库,方便处理操作中的错误,本文将对selenium库进行一定程度的重新封装,以便读者在了解selenium库后能够快速上手编程。
一、本文知识点:1.安装selenium库,2.selenium库查找元素的方式,3.重新打包selenium库
二、本文结构:1.先简单介绍一下知识点,2.把复制后可以直接运行的调试代码贴在一个完整的段落中,方便读者调试每个发布的一段代码。
三、 本文方法实现:以百度主页为控制网页,以谷歌浏览器为实验平台,使用python+selenium进行网页操作。ps:其他对应的爬网实验会更新。
四、本文实验:1.后台抓取A股市场数据(2020.09.09已更新),2.后台QQ邮箱到阅读最新邮件(待更新),等待其他实验更新(提供详细代码和评论,文末有对应链接)
温馨提示:以下为本文文章内容,以下案例可供参考
文章内容
一、安装selenium库及相关文件
Selenium 库是python 爬取网站 的自动化工具。支持的浏览器包括Chrome、Firefox、Safari等主流界面浏览器。它还支持Windows、Linux、IOS、Android等多种操作系统。
1.安装硒库
(1)点击win10的开始菜单,直接输入cmd右键以管理员身份运行
(2)如果安装python时勾选添加路径选项,可以直接输入命令
pip 安装硒
(如果没有添加,建议卸载python,重新安装,查看添加路径。这个建议慎选,因为需要重新安装之前下载的库)
(3)网络连接下等待完成。如果提示超时,可以尝试以下命令切换下载源并重新安装:pip install selenium -i
2.下载谷歌浏览器相关文件
本文使用的浏览器是谷歌浏览器,所以只介绍谷歌浏览器的爬取方法。其他浏览器的方法类似。
(1)点击下载谷歌浏览器
(2)安装谷歌浏览器后,查看谷歌浏览器的版本号,点击谷歌浏览器右上角的三个点,选择-帮助-关于谷歌浏览器-查看版本号。
如图,本文版本号为84.0.4147.125
(3)点击下载谷歌浏览器驱动
打开下载驱动页面,找到版本号对应的驱动版本,本文84.0.4147.125,所以找84.@开头的驱动>0 如图,点击打开下载对应系统的驱动。然后将其解压缩到您要编写项目的文件夹中。
不要放在python目录或者浏览器安装目录下。如果这样做,在移植到另一台计算机时,会出现各种BUG。根本原因是你的电脑已经安装了相应的库文件和驱动,但是移植的电脑可能没有安装。
二、Selenium 快速入门1.定位元素的八种方法
(1) id
(2) 姓名
(3) xpath
(4) 链接文本
(5) 部分链接文本
(6) 标签名
(7) 类名
(8) css 选择器
2. id 方法
(1) 在 selenium 中通过 id 定位一个元素:find_element_by_id
以百度页面为例。百度输入框页面源码如下:
其中,是输入框的网页代码,是百度的网页代码
通过id查找元素的代码和注释如下:
import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过id搜索清除搜索框内容##
浏览器驱动.find_element_by_id("kw").clear()
##通过id搜索输入搜索框内容##
浏览器驱动.find_element_by_id("kw").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过id搜索点击百度一下进行搜索##
浏览器驱动.find_element_by_id("su").click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit()
3. 命名方法
还是以百度输入框为例,在selenium中按名称定位一个元素:find_element_by_name
代码和注释如下:
import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过name搜索清除搜索框内容##
浏览器驱动.find_element_by_name("wd").clear()
##通过name搜索输入搜索框内容##
浏览器驱动.find_element_by_name("wd").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过id搜索点击百度一下进行搜索##
浏览器驱动.find_element_by_id("su").click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit()
4. xpath 方式
还是以百度输入框为例,通过xpath定位selenium中的一个元素:find_element_by_xpath。但是这种方法不适合在网页中的位置会发生变化的表格元素,因为xpath方法指向的是固定的行列,无法检测行列内容的变化。
首先在谷歌浏览器中打开百度,在空白处右击,选择勾选(N)选项,进入网页的开发者模式,如图。然后右键点击百度输入框,再次点击勾选(N)。可以发现右边代码框自动选中的部分变成了百度输入框的代码。最后右击自动选中的代码段右键-选择复制-选择复制Xpath,百度输入框的xpath为//*[@id="kw"],百度的xpath为// *[@id="su"]
接下来,使用此值执行百度搜索。代码和注释如下。
import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过xpath搜索清除搜索框内容,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_xpath('//*[@id="kw"]').clear()
##通过xpath搜索输入搜索框内容,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_xpath('//*[@id="kw"]').send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过xpath搜索点击百度一下进行搜索,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_xpath('//*[@id="su"]').click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit()
5. 链接文本和部分链接文本方法