爬虫:动态页面爬取Selenium

您所在的位置:网站首页 动态网页爬取实验心得 爬虫:动态页面爬取Selenium

爬虫:动态页面爬取Selenium

2024-07-12 05:26:38| 来源: 网络整理| 查看: 265

Ajax其实也是JavaScript动态渲染的页面的一种情形,不过JavaScript 动态渲染的页面不止Ajax 这一种: 比如中国青年网(详见 http://news.youth.cn/gn/ ), 它的分页部分是由 JavaScript 生成的,并非原始 HTML代码,这其中并不包含 Ajax 请求。 比如 ECharts 的官方实例(详见 http: //echarts.baidu.com/demo.html#bar-negative ),其图形都是经过 JavaScript 计算之后生成的。 再有淘宝这种页面,它即使是Ajax 获取的数据,但是其 Ajax 接口含有很多加密参数,我 一一 们难以直接找出其规律,也很难直接分析 Ajax 来抓取。

 

为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来实现, 这样就可以做到在浏览器 中看到是什么样,抓取的源码就是什么样,也就是可见即可爬,这样我们就不用再去管网页内部的 JavaScript用了什么算法渲染页面,不用管网页后台的A jax 接口到底有哪些参数.

Python 提供了许多模拟浏览器运行的库,如 Selenium、 Splash、 PyV8、 Ghost

目录

1、Selenium使用

1、基本使用

2、声明浏览器对象

3、访问页面

4、查找节点

5、节点交互

6、动作链

7、执行JavaScript

8、获取节点信息 

8.1 获取属性

8.2 获取文本值

8.3 获取ID,位置,标签名和大小

9、切换Frame

10、延时等待

10.1 隐式等待

10.2 显示等待

11、前进和后退

12、Cookies操作

13、选项卡管理

14、捕获异常

1、Selenium使用

Selenium是一个 自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作, 同时还可以获取浏览器当前呈现的页面的源代码 ,做到可见即可爬, 对于一些 JavaScript动态渲染的页面来说,此种抓取方式非常有效

1、基本使用 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() try: driver.get("http://www.baidu.com") input = driver.find_element_by_id("kw") input.send_keys("Python") input.send_keys(Keys.ENTER) wait = WebDriverWait(driver,10) wait.until(EC.presence_of_element_located((By.ID,"content_left"))) print(driver.current_url) print(driver.get_cookies()) print(driver.page_source) finally: driver.close()

运行代码后,会自动弹出一个Chrome浏览器,浏览器首先会跳转到百度,然后再搜索框中输入Python,接着会跳转到搜索结果页面

 我们在代码中打印了当前得到的URL、Cookies和源代码都是浏览器中真是内容,如果用 Selenium来驱动浏览器加载网页的话, 就可以直接拿到JavaScript渲染的结果了, 不用担心使用的是什么加密系统

2、声明浏览器对象

Selenium支持非常多的浏览器,如 Chrome、Firefox、Edge ,还有Android、 BlackBerry 等手机端的浏览器。 另外,也支持无界面浏览器PhantomJS

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() driver = webdriver.Firefox() driver = webdriver.Edge() driver = webdriver.PhantomJS() driver = webdriver.Safari()

这样就完成了浏览器对象的初始化,并将其赋值为driver对象

3、访问页面

使用get() 方法来获取请求网页,参数传入连接URL即可

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait browser = webdriver.Chrome() browser.get("https://www.taobao.com") print(browser.page_source) browser.close()

运行后,可弹出Chrome浏览器并且自动访问了淘宝,然后控制台输出了淘宝输出了淘宝页面的源代码

4、查找节点

Selenium 可以驱动浏览器完成各种操作 ,比如填充表单、模拟点击等。比如,我们想要完成向某 个输入框输文字 的操作,总需要知道这个输入框在哪里吧?而 Selenium 提供了一系列查找节点的方法,我们可以用这些方法来获取想要的节点,以便下一步执行一些动作或者提取信息

4.1 单个节点

从淘宝页面中提取搜索框这个节点

可以通过他的属性,id,name来定位到该搜索框

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() driver.get("https://www.taobao.com") input_frist = driver.find_element_by_id('q') input_seconde = driver.find_element_by_css_selector('#q') input_third = driver.find_element_by_xpath("//*[@id='q']") print(input_frist,input_seconde,input_third) driver.close() 结果:

通过三种方式获取输入框,分别是ID,CSS选择器和XPath获取,可以看到返回的结果是完全一致的

其中还包含以下获取单节点的方法:

driver.find_element_by_xpath() driver.find_element_by_id() driver.find_element_by_name() driver.find_element_by_link_text() driver.find_element_by_partial_link_text() driver.find_element_by_tag_name() driver.find_element_by_class_name() driver.find_element_by_css_selector()

Selenium还提供了通用方法,find_element() ,它需要传入两个参数:查找方式By和值,实际上,他就是find_element_by_id()  这种方法的通用函数版本,比如:find_element_by_id(id) 就等价于find_element(By.ID,id) ,二者得到的结果完全一致,

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait driver = webdriver.Chrome() driver.get(&


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭