网页源代码抓取工具( 动态渲染的页面来说)
优采云 发布时间: 2022-01-03 14:53网页源代码抓取工具(
动态渲染的页面来说)
Selenium 是一种自动化测试工具,可以驱动浏览器执行特定的动作,例如点击、下拉等操作。同时,它还可以获取浏览器当前呈现的页面的源代码,以便在可见时进行抓取。对于一些JavaScript动态渲染的页面,这种爬取方式非常有效。
0、安装
(1) Selenium 安装
pip 安装硒
(2)网络驱动下载
Selenium 是一种需要与浏览器配合使用的自动化测试工具。 Selenium 使用 Webdriver 来驱动浏览器。
您需要根据您的浏览器版本下载相应的webdriver驱动。比如这里使用的是ChromeDriver驱动,可以百度下载。
下载完成后是一个可执行文件。我们可以把它添加到环境变量中,然后我们在构造webdriver.Chrome()的时候就不需要括号里传入驱动的路径了。
1、基本用法
2、初始化浏览器对象
从 selenium 导入 webdriver
浏览器 = webdriver.Chrome()
3、访问页面
browser.get("")
#获取网页源码
打印(browser.page_source)
browser.close()
4、查找节点
(1)查找单个节点
常用的有以下7种:
find_element_by_id
find_element_by_class_name
find_elemnet_by_xpath
find_element_by_css_selector
find_element_by_name
find_element_by_tag_name
find_element_by_link_text
find_element_by_partial_link_text
(2)查找多个节点
看上面找单个节点的方法,区别是element变成了elements
5、节点交互
常用的有:
(1)input.send_keys("Python") 在搜索框中输入内容,如Python
(2).input.clear() 清除搜索框内容
(3).button.click() 模拟鼠标点击,button是找到的可点击标签
6、动作链
例如,将下面的 A 放在 B 中:
7、执行 JavaScript
对于某些操作,Selenium 不提供操作。比如下拉进度条
browser.execute_script (js 代码)
8、获取节点信息
#获取标签的href属性
a.get_attribute("href")
#获取节点下的所有文本信息并返回一个字符串
div.text
9、切换帧
我们知道网页中有一种节点叫做iframe,就是子框架,相当于页面的子页面,其结构与外部网页的结构完全相同。 Selenium 打开页面后,默认在父框架中运行。如果此时页面中有子框架,则无法获取子框架中的节点。这时候就需要使用switch_to.frame()方法来切换Frame。
#这里根据id名称切换
browser.switch_to.frame("iframeResult")
10、延迟等待
在Selenium中,get()方法会在网页框架加载完毕后结束执行。这时候如果得到page_source,可能不是浏览器完全加载的页面。如果某些页面有额外的 Ajax 请求,我们在 网页的源代码中可能无法成功获取。因此需要延迟等待一定的时间来保证节点已经加载完毕。
这里有两种等待方式:一种是隐式等待,另一种是显式等待。
(1)隐式等待
正在等待一个固定的时间。如果 Selenium 在 DOM 中没有找到节点,它会继续等待指定时间,并在指定时间结束时再次检查是否存在该节点,如果没有则抛出异常。单位是s
browser.implicitly_wait(10)
(2)明确等待
显式等待更灵活,可以指定最长等待时间,如果在此时间内返回,将继续运行代码。单位是s
首先使用wait = WebDriverWait(browser, 10)构造等待对象,
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "left")))之后,EC是等待条件对象,presence_of_element_located是需要的等待条件,等待条件有很多,具体看下面:
其他等待条件:
11、前进后退
使用浏览器一般都有前进后退功能。 Selenium 也可以完成这个操作。使用 back() 后退和 forward() 前进。示例如下:
12、Cookies
13、标签管理
首先执行js代码,browser.execute_script('window.open()')。打开另一个标签
切换到另一个标签 browser.switch_to.window(browser.window_handles[1])
关闭标签 browser.execute_script('window.close()')
切换回 browser.switch_to.window(browser.window_handles[0])
14、无头模式
Selenium 不再打开 Chrome 浏览器,只需通过 option = webdriver.ChromeOptions() 和 option.add_argument('--headless') 添加即可。
以上是Selenium的全部内容,使用时只需要设置如下几个参数即可。