python+selenium爬虫从零整理三

先认识XPath定位

我们以Chrome浏览器百度主页为例,右键检查元素,找到“百度一下”按钮对应的标签,对该标签右键>copy>找到Copy XPath,复制得到的XPath为//*[@id="su"]不过这只是相对的XPath路径,如需知道完整的路径就要借助XPath Helper插件。

前面安装好XPathHelper插件后,按Shift+Ctrl+X 打开,浏览器上方会出现一个黑框;按住Shift鼠标移动到页面元素上,黑框左栏会出现该元素的完整XPath,之后用selenium定位时会用到该XPath。

如果嫌以上方式获取到XPath的绝对路径太长,可以删除部分路径,然后将最简路径复制到左栏里,右栏会显示在该页面搜索到了几个结果(即RESULTS后面的数字)以及搜到该元素显示的文本,这些就是爬虫会抓取的内容。

学习selenium的用法

1.我们先尝试用最简单的方式调用selenium模块,代码如下:

from selenium import webdriver

url = 'https://www.baidu.com'

driver = webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(8)

driver.get(url)

driver.quit()

解释:其中,第一行 from **** import **** 或者 import **** 是开头调用模块的方式;第二行 先将百度的网址以字符串的形式放入一个变量url中(为了之后修改和调用方便);第三句driver = webdriver.Chrome()是设置selenium启动Chrome浏览器;第四句driver.maximize_window()是将浏览器窗口最大化,driver.implicitly_wait(8)是设置一个等待,selenium的三种等待方式可以参考这篇博客的解释(https://blog.csdn.net/cyjs1988/article/details/76033180);driver.get(url)是控制Chrome浏览器打开url变量所属的链接,driver.quit()是关闭Chrome浏览器,最后按快捷键Ctrl + B就可以立即编译,看到运行结果。

postscript:建议读者重点百度一下显式等待方式,在加载js代码的时候做判断会比较方便。

2.尝试使用selenium查找页面元素,代码如下:

import time

from selenium import webdriver

browser = webdriver.Chrome()

time.sleep(3)

text = browser.find_element_by_id("cp").text

print(text)

browser.quit()

解释:第一行import time为使用强制等待必须先调用 time 这个库,不要问我为什么TvT;第二行from selenium import webdriver这个也是使用selenium必须的,后面就不再解释了;第三四行是使用selenium打开网址的普遍写法,感兴趣的话可百度webdriver的其它命令;第五行time.sleep(3)设置一个强制等待,括号里填几就是等几秒后继续下一步代码;第六行 设置selenium的定位方式,其它方式(具体请自行百度或

参考

)browser.find_element_by_id("cp")是通过查找html5源码里 id = cp 的标签来定位该元素,.text为获取该元素文本 (其它操作参考http://www.cnblogs.com/fnng/p/3202299.html),然后将该文本赋值给变量text;第七行print(text)打印该变量内容;最后关闭浏览器。

3.输入关键词并模拟鼠标点击,代码如下:

import time

from selenium import webdriver

browser = webdriver.Chrome()

browser.find_element_by_id('kw').send_keys("selenium")

browser.find_element_by_id("su").click()

time.sleep(5)

browser.quit()

解释:前四行指令为打开网页,第五行browser.find_element_by_id('kw')为应用ID定位找到 开头的标签,该标签对应的就是百度的搜索框输入栏,.send_keys("selenium")为向该标签对应的输入框,输入关键词selenium;第六行 同理browser.find_element_by_id("su")找到百度一下按钮所在位置,.click()为对该元素加一个单击操作,即完成了搜索过程。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180906G1XE2E00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券