第五讲 动态HTML处理(selenium,phantomjs,chrome配置和操作)

一、反爬与爬虫之js异步

(一)反爬措施:改变网页数据获取架构。

数据不在页面直接渲染,而是通过前端js异步获取。js获取到数据需要:执行js才可以,即通过浏览器触发Ajax事件。但是使用requests模块获取到的js代码并不能执行。—js代码只包含Dom和Bom命令,并没有我们需要的数据。
解决的办法如果能找到一个执行js的工具,是不是数据就出来了。浏览器中之所能够出现数据是因为浏览器就有执行js的功能。
同时我们python也有两个工具。

  • selenium—驱动–让我们可以通过代码的方式来进行下面两个工具的控制。
    • phantomjs—无界面浏览器
    • chrome----有界面浏览器(谷歌)

(二)爬虫的基本流程
在这里插入图片描述
(三)Ajax 数据获取
如果提交表单之后,或从服务器获取信息之后,网站的页面不需要重新刷新,那么你访问的网站就在用 Ajax技术。
Ajax 全称是 Asynchronous JavaScript and XML(异步 JavaScript 和 XML),网站不需要使用单独的页面请求就可以和网络服务器进行交互(收发信息)。
在这里插入图片描述

二、Selenium 数据获取

(一)Selenium 简介
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截 屏,或者判断网站上某些动作是否发生.
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。
pip 命令安装:推荐使用下列版本

pip install selenium==2.48.0

(二)PhantomJS 简介
PhantomJS 是一个基于 Webkit 的“无界面”(headless)浏览器,它会把网站加载到内存并 执行页面上的 JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器要高效。
因为 PhantomJS 是一个功能完善(虽然无界面)的浏览器而非一个 Python 库,所以它不需要像 Python 的其他库一样安装,但我们可以通过 Selenium 调用 PhantomJS 来直接使用。
下载与安装:
使用镜像源能提高下载速度,防止下载失败。
在这里插入图片描述
这里我们下载2.1.1的windows版本
在这里插入图片描述
解压后进入bin目录,找到.exe文件
在这里插入图片描述
若当前环境使用的是anaconda虚拟环境,复制该文件到anaconda下的script目录下即可。在命令行窗口运行phantomjs命令进行测试。

phantomjs

在这里插入图片描述
出现上述内容表明安装成功。

(三)Chrome(有界面)
​ 可以用来测试一些复杂项目。
​1、下载安装:

  • 先要确定chrome浏览器是正版的(从官网下载)
    ​ 下载安装:https://www.google.cn/chrome/
  • 若已经安装,应打开已经安装的谷歌浏览器中的帮助——>关于Google里面的版本信息:
    在这里插入图片描述在这里插入图片描述
    显示红框里的内容就说明该浏览器是正版,否则应卸载重新安装。同时还需要检查控制面板中是否有其他版本的谷歌浏览器,也应将其卸载,否则程序无法正常运行。
    2、下载chromedirver的驱动:
    第一步:百度搜索镜像源文件—>chromedriver
    在这里插入图片描述
    第二步:确定要下载的版本号,前三位一致,后一位相近
    在这里插入图片描述
    第三步:选择windos版本下载;
    在这里插入图片描述
    第四步:配置chromedirver:
    找到里面exe工具,将这个工具放入anaconda/scripts文件夹下即可。
    在这里插入图片描述
    测试:打开cmd
    在这里插入图片描述

三、selenium+phantomjs的操作。

在这里插入图片描述
参考代码如下:

"""
selenium+phantomjs入门
"""
from selenium import webdriver
import time
# 1、先要创建一个浏览器驱动
driver = webdriver.PhantomJS()
# driver = webdriver.Chrome()
# driver = webdriver.Firefox()
# driver = webdriver.Ie()
# driver = webdriver.Safari()

# 2、请求url
driver.get('https://www.baidu.com/')
# 3、等待
time.sleep(1)
# 4、这是driver就是浏览器。这个浏览器里面已经打开了百度的首页

# 获取页面截图
driver.save_screenshot('index.png')
# 获取页面元素
# find_element_by_id
result = driver.find_element_by_id('kw')
print(result)

# webelement的操作
# 如果是input:输入
result.send_keys('python')
# 找到按钮:点击
driver.find_element_by_id('su').click()
time.sleep(1)
# 找到元素位置
print(result.location)
print(result.size)
# 对于driver对象(浏览器对象)的属性

# 获取页面源代码--浏览器功能组件帮我们将js执行后得到页面内容。
print(driver.page_source)

在这里插入图片描述
案例主要有三个,请看下一篇:第五讲案例
在这里插入图片描述
案例https://blog.csdn.net/lxd1908717401/article/details/107326627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值