使用Selenium实现动态渲染页面的爬取

一、安装相关包和软件

1、安装Selenium包

Pip3 install Selenium

2、安装chromedriver

访问chromedriver镜像站,下载对应版本的chromedriver,例如我的浏览器版本为

  

安装的的chromdriver为v2.38(其支持的浏览器版本为v65-67,在其支持范围内,下载后将其加入系统环境变量)

3、对之前的安装进行测试

执行以下代码,如果能正确弹出chrome浏览器窗口,则正常(不正常的情况下重点检查chromedriver版本)

from selenium import webdriver

browser=webdriver.Chrome()

 

 

二、Selenium的相关功能

1、初始化

from selenium import webdriver

browser=webdriver.Chrome()

 

该代码完成了浏览器对象的初始化,调用了Chrome浏览器(Selenium同样支持其他浏览器,如browser=webdriver.Firefox(),browser=webdriver.Safari())

 

  

2、访问页面

browser.get('https://www.baidu.com') #执行了打开百度网页操作

print(browser.page_source) #输出了网页源代码

Browser.close()#关闭了浏览器

 

  

 

3、查找节点

这里以淘宝网为例,查看淘宝首页源码

发现淘宝首页搜索框部分的id和name均为q

from selenium import webdriver

browser=webdriver.Chrome()

browser.get('https://www.taobao.com') #打开淘宝网页

input_first=browser.find_element_by_id('q') #根据id进行选择

input_second=browser.find_element_by_css_selector('#q') #根据css选择器进行选择

input_third=browser.find_element_by_xpath('//*[@id="q"]') #Xpath进行获取

print(input_first)

print(input_second)

print(input_third)

browser.close()

 

  

 

执行以上代码,输出结果为

三种方式结果完全相同

  

4、简单交互

From selenium import webdriver

Import time

  

browser=webdriver.Chrome()

browser.get('https://www.taobao.com') #打开淘宝

input=browser.find_element_by_id('q') #找到id为q的节点,也就是搜索框

input.send_keys('Ipad') #输入ipad

time.sleep(1) #暂停1秒

input.clear() #清空之前输入的内容

input.send_keys('MI6') #输入MI 6

button=browser.find_element_by_class_name('btn-search') #找到搜索按钮

button.click() #点击搜索

 

以上代码中包含了输入,清空内容,点击三种常用动作

 

  

5、执行JavaScript

使用execute_script()方法可以执行JavaScript,从而实现API没有实现的功能

例如以下代码

from selenium import webdriver

Import time

browser=webdriver.Chrome()

url=('https://www.zhihu.com/explore')

browser.get(url)

time.sleep(3)

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')

browser.execute_script('alert("ToBottom")')

 

该代码打开了知乎的explore页面,并且调用JavaScript语句window.scrollTo(0,document.body.scrollHeight)翻页到页面最底部,

 

然后调用alert("ToBottom")输出To Bottom

  

6、获取节点信息(需要选选中节点)

获取属性(get_attribute())

Test= browser.find_element_by_id('p') #选中了id为P的节点

Print(test.get_attribute('class')) #输出该节点的class

 

获取文本(.text),获取id(.id),获取位置(.location),获取标签名(.tag_name),获取大小(.size)

 

Test= browser.find_element_by_id('p') #选中了id为P的节点

Print(test.text)

 

  

 

7、延时等待(等待网页加载出想要的内容,免得网速太慢跟不上节奏)

隐式等待(implicitly_wait())——如果没有想要找的节点,等待固定长的一段时间,时间完了再查找

from selenium import webdriver

browser=webdriver.Chrome()

browser.implicitly_wait(5)

browser.get('https://www.zhihu.com/explore')

input=browser.find_element_by_class_name('zu-top-question')

print(input)

 

隐式等待5秒,五秒后没找到报错

 

  

显式等待——指定最长时间,该时间内找到就返回值,到了最长时间仍没有找到就报错

代码略

  

8、前进和后退

访问多个网页时,使用back()方法后退,forward()方法前进

from selenium import webdriver

  

browser=webdriver.Chrome()

browser.get('https://www.zhihu.com')

browser.get('https://www.mi.com')

browser.get('http://www.taobao.com')

browser.back()

browser.forward()

 

  

 

9、对cookie操作

from selenium import webdriver

  

browser=webdriver.Chrome()

browser.get('https://www.zhihu.com/explore')

print(browser.get_cookies()) #获取cookie值

browser.add_cookie({'name':'test','domain':'www.zhihu.com','value':'germey'}) #添加cookie

print(browser.get_cookies())

browser.delete_all_cookies() #删除所有cookie

print(browser.get_cookies())

 

  

 

8、对选项卡进行操作

import time
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()') #调用JavaScript打开新窗口
print(browser.window_handles)  #输出选项卡序号
browser.switch_to_window(browser.window_handles[1]) #切换到标号为1的选项卡(也即是第二个创建的)
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) #切换到编号为1的选项卡(第一个打开的选项卡)
browser.get('https://www.zhihu.com')

 

  

 

  

  

  ps:本文为《python3网络爬虫实战》学习笔记,原作者崔庆才,文中多处代码为该作者书中提供,侵删

代码为python3编写,注意与python区别。笔记采用OneNote记录,部分地方有首字母自动大写,可能漏掉修改,注意区别

联系方式:csblog@126.com

  

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值