python爬虫之selenium模拟浏览器

这篇具有很好参考价值的文章主要介绍了python爬虫之selenium模拟浏览器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法[1]。当时爬的是豆瓣,比较容易分析出所需信息的真实地址,不过一般大点的网站像淘宝这种是不好分析的,所以利用selenium模拟浏览器的行为来爬取数据是一个比较可行的办法。

2.selenium基础

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11), Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。 ——百度百科对selenium的定义

可以看到selenium最开始不是用于爬虫的而是一款web开发的测试工具,简单点解释:可以操控浏览器做人类浏览网页的动作,比如:鼠标点击、拖拽;用户输入,表单填充;Cookie;等等,当然通过它得到ajax网页的真实数据也不在话下。

selenium教程:https://www.yiibai.com/selenium

3.安装selenium+Chromedriver

3.1 安装selenium

pip install selenium

3.2 安装ChromeDriver

不要使用PhantomJS,已经停止维护。最新版的selenium也不再支持了,继续使用会报这个:Warning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead

谷粉当然选择Chrome了,Selenium可以操作浏览器,但是需要借助ChromeDriver驱动来实现。ChromeDriver通过chrome的自动代理框架控制浏览器。

①查看Chrome浏览器版本信息,点右上角三个白点,选择帮助,再选择关于Chrome就可以看到当前的Chrome版本信息。

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

77.0.3865.120就是当前的版本信息。

②再打开http://npm.taobao.org/mirrors/chromedriver/选择对应版本的Chromedriver。

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

选择查看notes.txt,可以看到是支持77的,找到浏览器对应版本的Chromedriver了。

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

下载32位的就可以了,占资源更少,64位也可以用。下载好后解压文件看到:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

别双击运行,推荐放到python安装路径下,比如我的python在D盘。(不和python放一起也行就是以后使用不方便。

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

完成后在cmd下输入Chromedriver验证是否安装成功:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

到这里所有工具配置完毕。

4.利用selenium+Chromedriver模拟操作

4.1 使用selenium打开百度,并搜索关键字“python”

selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要:

# 从selenium导入webdriver
from selenium import webdriver 
# 声明调用哪个浏览器,本文使用的是Chrome,其他浏览器同理。有如下两种方法及适用情况
driver = webdriver.Chrome()#把Chromedriver放到python安装路径里  
driver = webdriver.Chrome( executable_path="#放入Chromedriver的路径")#没有把Chromedriver放到python安装路径

运行下面代码,会自动打开浏览器,然后访问百度:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

注:driver.get()类似于requests.get(),不过区别就是driver.get()请求的源代码中还包含异步加载的数据,即“所见即所得”,这也是selenium模拟浏览器在爬虫中存在的意义。

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

上图的百度界面就是通过selenium+Chromedriver打开的,显示Chrome正在受到自动测试软件的控制。抓取完数据,记得要关掉driver,不然会占内存:

driver.close()#浏览器可以同时打开多个界面,close只关闭当前界面,不退出浏览器
driver.quit()#退出整个浏览器

下面代码实现打开百度界面等待三秒后退出:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

基本的打开退出学会了,再来看看人工搜索关键词的流程:打开浏览器>>>打开百度>>>找到搜索输入框>>>输入要搜索的关键词>>>点击搜索按钮

前两个步骤上面代码已经实现了,再来看看找到输入框,和之前爬虫时寻找所需元素信息的套路一样,把鼠标放到输入框上,右击选择检查,很容易就找到了输入框的标签信息,如下图:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

可以看到输入框的标签信息:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

之前文章中定位元素信息用的最多的就是beautifulsoup的find和find_all,现在是通过Chromedriver打开浏览器的,人家也就自己的定位元素的一套办法:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

红色框里就是selenium+webdriver定位元素的办法,常用办法如下:

  1. find_elements_by_id # ID
  2. find_elements_by_class_name # class
  3. find_elements_by_tag_name # 标签名
  4. find_elements_by_name # name
  5. find_elements_by_link_text # a标签中的text查找(精确匹配)
  6. find_elements_by_partial_link_text #a标签中的text查找(部分匹配即可)
  7. find_elements_by_css_selector # css选择器查找
  8. find_elements_by_xpath # find_elements_by_xpath("//input")

注:find_element_by_将获取find_elements_by_的第一个元素,记住element是获取单个元素,elements是获取符合条件的多个元素信息。

上面的办法通过标签名称还有标签属性定位元素应该已经很熟悉了,遇到复杂网页xpath的定位功能也是很强大,这两个办法应对绝大多数网页已经足够,第7种方法:通过CSS选择器获取信息,学习一下。

有了这些方法,获取输入框信息应该已经很简单了,如下代码:

 #通过id信息来获取
input = driver.find_element_by_id('kw')
#还可以通过xpath来获取
input = =driver.find_element_by_xpath(//*[@id="kw"])

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

最后两个步骤,代码实现如下:

input.send_keys('python')#在输入框里输入搜索关键词“python”
searchButton = driver.find_element_by_id('su') #获取搜索按钮
searchButton.click()#点击搜索按钮

到这里,selenium打开百度,并搜索关键字“python”就已经实现了,完整代码如下:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

4.2 使用selenium爬取京东商品信息

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

京东是一个异步加载的网页,移动滚动条会一直加载数据,和之前说的豆瓣电影排行榜的网页是类似的[2]。继续重复上面在百度输入关键词搜索的步骤,获取京东页面>>>获取搜索输入框>>>输入搜索关键词>>>点击搜索按钮>>>移动滚动条到网页底部>>>获取整页商品的名称和价格信息。移动滚动条到网页底部,是采用js脚本直接操作[3],完整代码详细及注释:

from selenium import webdriver # 从selenium导入webdriver
import time
url = 'https://www.jd.com/'
driver = webdriver.Chrome()  # 声明调用Chrome
driver.get(url) # 获取京东页面

input = driver.find_element_by_xpath('//*[@id="key"]')#获取输入框
input.send_keys('iphone')#输入搜索关键词
driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()#点击搜索按钮

js="var q=document.documentElement.scrollTop=100000"#将滚动条移动到页面底部的js语句
driver.execute_script(js)#执行上面移动滚动条的js语句
time.sleep(5)#睡眠,等待异步加载的数据加载完成

#获取文本信息时selenium中的xpath语法与之前区别:前面是在xpath路径后加/text(),而selenium是整个语句后面加.text
prices = driver.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[3]/strong/i')
names = driver.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li/div/div[4]/a/em')
print(len(names))#京东每页有60个商品信息,检查爬取数据是否完整

for name,price in zip(names,prices):
    print(name.text.replace('\n',''),price.text)
driver.quit()#退出

运行结果:

可以使用selenium和webdriver来模拟浏览器操作,python入门教程,python,爬虫,开发语言,c语言,算法

显示60条商品信息全部爬取成功。

5.小结

本文只是对selenium+webdriver爬虫做了一个简单的介绍及应用,起到一个抛砖引玉的作用,要想利用好这个工具还需要后期查看更多的资料进行补充学习,上面介绍的Chromedriver爬虫效率还很低,后期可以使用Chrome的无头浏览器模式即headless模式,设置无图属性不用加载图片等方法,提升selenium模拟浏览器爬虫效率。文章来源地址https://www.toymoban.com/news/detail-774344.html

参考

  1. ^python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题 python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题 - 知乎
  2. ^python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题 python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题 - 知乎
  3. ^python中selenium 滚动条下拉 操作 python中selenium 滚动条下拉 操作_driver下划python-CSDN博客

到了这里,关于python爬虫之selenium模拟浏览器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫进阶之selenium模拟浏览器

    Selenium是一个用于自动化浏览器操作的工具,通常用于Web应用测试。然而,它也可以用作爬虫,通过模拟用户在浏览器中的操作来提取网页数据。以下是有关Selenium爬虫的一些基本介绍: 浏览器自动化: Selenium允许你通过编程方式控制浏览器的行为,包括打开网页、点击按钮

    2024年01月20日
    浏览(39)
  • java爬虫遇到网页验证码怎么办?(使用selenium模拟浏览器并用python脚本解析验证码图片)

            笔者这几天在爬取数据的时候遇到了一个很闹心的问题,就是在我爬取数据的时候遇到了验证码,而这个验证码又是动态生成的,尝试了很多方法都没能绕开这个验证码问题。         我的解决方案是:使用selenium模拟浏览器行为,获取到动态生成的验证码后用

    2024年02月09日
    浏览(54)
  • [爬虫]2.2.1 使用Selenium库模拟浏览器操作

    Selenium是一个非常强大的工具,用于自动化Web浏览器的操作。它可以模拟真实用户的行为,如点击按钮,填写表单,滚动页面等。由于Selenium可以直接与浏览器交互,所以它可以处理那些需要JavaScript运行的动态网页。 首先,我们需要安装Selenium库。你可以使用pip命令来安装:

    2024年02月16日
    浏览(38)
  • python 爬虫热身篇 使用 requests 库通过 HTTP 读取网络数据,使用 pandas 读取网页上的表格,使用 Selenium 模拟浏览器操作

    在过去,收集数据是一项繁琐的工作,有时非常昂贵。机器学习项目不能没有数据。幸运的是,我们现在在网络上有很多数据可供我们使用。我们可以从 Web 复制数据来创建数据集。我们可以手动下载文件并将其保存到磁盘。但是,我们可以通过自动化数据收集来更有效地做

    2023年04月08日
    浏览(47)
  • 项目总面试技巧,利用Selenium模拟浏览器进行爬虫,解析底层原理

    count = 0 def getCommentList(): global count try: commentList = driver.find_elements_by_css_selector(‘div.reply-content’) for comment in commentList: content = comment.find_element_by_tag_name(‘p’) print(content.text) count = count + 1 return commentList except: return None def clickMoreButton() - bool: try: moreButton = driver.find_element_by_css_se

    2024年04月17日
    浏览(26)
  • 阿里巴巴面试算法题利用Selenium模拟浏览器进行爬虫,【工作经验分享

    def clickMoreButton() - bool: try: moreButton = driver.find_element_by_css_selector(‘button.page-last-btn’) moreButton.click() return True except: return False def main(): while True: try: driver.switch_to.frame(driver.find_element_by_css_selector(“iframe[title=‘livere-comment’]”)) except: pass commentList = getCommentList() waitTime = 0 while co

    2024年04月16日
    浏览(72)
  • Python 和 Selenium 的浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试。 它的取名很有意思,因为当时最流行的一款自动化测试工具叫做 QTP,是由 Mercur

    2024年02月08日
    浏览(32)
  • Python爬虫(2)-Selenium控制浏览器

    Selenium中提供了不少的方法来操作浏览器 使用driver.get(‘网址’)的方式来打开浏览器 driver.refresh() 浏览器切换标签的方法就是, driver.current_window_handle 用selenium点击新打开了一个网页,需要告知selenium目前这个窗口是新的窗口,那么它才能早新的页面进行操作不然的话就无法操

    2024年02月08日
    浏览(32)
  • python使用selenium控制浏览器进行爬虫

    这里以谷歌浏览器为例,需要安装一下chromedriver,其他浏览器也有相对应的driver,chromedriver下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 然后是打开python环境安装一下依赖 pip install selenium ,验证一下控制浏览器是否成功 点击运行脚本可以看到以下页面就成功了。 爬虫

    2024年02月04日
    浏览(42)
  • 【python爬虫】10.指挥浏览器自动工作(selenium)

    上一关,我们认识了cookies和session。 分别学习了它们的用法,以及区别。 还做了一个项目:带着小饼干登录,然后在博客中发表评论。 除了上一关所讲的登录问题,在爬虫过程中,我们还可能会遇到各种各样棘手的问题—— 有的网站登录很复杂,验证码难以破解,比如大名

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包