python动态渲染页面的爬取--使用Selenium

2018426

10:05

一、安装相关包和软件

1、安装Selenium包

Pip3 install Selenium

2、安装chromedriver

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

   

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

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

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

from selenium import webdriver

browser=webdriver.Chrome()

python动态渲染页面的爬取--使用Selenium_第1张图片

二、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、查找节点

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

python动态渲染页面的爬取--使用Selenium_第2张图片

发现淘宝首页搜索框部分的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、对选项卡进行操作

python动态渲染页面的爬取--使用Selenium_第3张图片

   

   

   

   

 Ps:这篇文章主要是学习笔记,OneNote编写过程中有自动首字母大写,可能有大小写错误。

笔记来源于书《Python3网络爬虫开发实战》,作者崔庆才,很不错的一本书,侵删

  

你可能感兴趣的:(python动态渲染页面的爬取--使用Selenium)