05-爬虫进阶_selenium(01 - 04:爬AJAX数据的方法、selenium+chromedriver安装、关闭页面和浏览器、定位元素)

目录

 

01 AJAX介绍和爬取ajax数据的两种方式

02 selenium+chromedriver安装和入门

03 selenium关闭页面和浏览器

04 selenium定位元素的方法

 


01 AJAX介绍和爬取ajax数据的两种方式

动态网页数据抓取

什么是AJAX:

AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML。过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用Ajax)如果需更更新内容,必须重就整个网页页面。因为传统的在传输数据格式方面,使用的是XML语法。因此叫做AJAX,其实现在数据交互基本上都是使用JSON。使用AJAX加载的数据,即使使用了JS,将数据渲染到了浏览器中,通过右键-查看网页源代码还是不能看到通过AJAX加载的数据,只能看到使用这个url的html码。

获取ajax数据的方式:

1、直接分析ajax调用的接口。然后通过代码请求这个接口。
2、使用Selenium+chromedrivert拟浏览器行为获取数据。

方式优点缺点

分析接口

直接可以请求到数据,不需要做一些解析工作,代码量少,性能高。分析接口比较复杂,特别是一些通过js混淆的接口,要有一定的js功底。容易被发现是爬虫。
selenium直接模拟划览器的行为。浏览器能请求到的,使用selenium也能请求到的。爬虫更稳定。代码量多。性能低。

02 selenium+chromedriver安装和入门

Selenium+chromedriver获取动态数据:

Selenius相当于是一个机器人。可以模拟人类在览器上的一些行为,自动处理划览器上的一些行为,比如点击,境充数据,删除cooke等。chromedriver是一个驱动chrome浏览器的动程序,使用他才可以驱动浏览器。当然针对不同的刘览器有不同的driver。以下列出了不同对器及其对应的driver:

1. Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads
2. Firefox: https://github.com/mozilla/geckodriver/releases
3. Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
4. Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/

安装Selenium和chromedriver:

1、安装Seleniun:Selenius有很多语言的版本,有java,ruby,python等.以下下载python的版本。
 

pip install selenium

2、安装chromedriver:下執完成后,放到不需要权限的英文目下就可以了。

注意:chromedriver的版本一定要与Chrome的版本一致,不然就不起作用。

查看Chrome的版本:在浏览器中输入chrome://version/

chromedriver有两个下载地址:

1)http://chromedriver.storage.googleapis.com/index.html

2)https://npm.taobao.org/mirrors/chromedriver/

 

快速入门:
现在以一个简单的获取百度首页的例子来讲下selenius和cnronmedriver如何快速入门:

# encoding: utf-8

from selenium import webdriver
driver_path = r"D:\ProgramApp\chromedriver\chromedriver.exe"
driver = webdriver.Chrome(executable_path = driver_path)
driver.get('https://www.baidu.com/')
print(driver.page_source)

03 selenium关闭页面和浏览器

selenium常用操作:

更多教程请楚考:http://selenium-python.readthedocs.io/installation.htmleintroduction

关闭页面:
1.driver.close():关当前页面
2.driver.quit():退出整个浏览器

 

04 selenium定位元素的方法

# 定位元素:
# 1、find_element_by.id:根据id来查找某个元素。等价于:

submitTag = driver.find_element_by_id('su')
submitTag1 =driver.find_elenent(By.ID,'su')

# 2、fina_element_by_class_nane 根据类名找元素。等价于:

submitTag.driver.find_element_by_class-nane('su')
subeitTag1.driver.find_elesent(By.CLASS_NAME,'su')

# 3、find_elements_by_name:根据name属性的值来直找元素。等价于:
submitTag.driver.find_element_by_name('emai1')
submitTag1.driver.find_elenent(By.NAME,'email')

# 4、find_element_by_tag_name:根据标签名来直找元素。等价于:
subeitTag = driver. find-elesent_by_tag_nane("div")
subeltTag1 = driver. find-elesent (By.TAG_NAME,"div")

# 5、find_element_by_xpath:根据xpath语法来获取元素。等价于:
submitTag = driver.find_element_by_xpath('//div')
subeltTag1 = driver.find_element(By.XPATH,"//div")

# 6、find_element_by_css_selector:根据css选择器选择元素。等价于:
subnitTag = driver.find_element_by_css_selector('//div')
subeitTag1 = driver.find_element(By.CSS_SELECTOR, "//dlv")

要注意,find_element是获取第一个满足条件的元素find_elements是获取所有满足条件的元素。

举例:打开百度网页并搜索“python”

from selenium import webdriver
from lxml import etree

driver_path = r"D:\application\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(executable_path = driver_path)
driver.get('https://www.baidu.com/')

# 打印网页源代码
# print(driver.page_source)

# html = etree.html(driver.page_source)
# html.xpath("")

# 1)以id的方法查找输入框
# inputTag = driver.find_element_by_id("kw")

# 2)以name的方法查找输入框
# inputTag = driver.find_element_by_name("wd")

# 3)用css选择器的方法查找输入框
# inputTag = driver.find_element_by_css_selector(".quickdelete-wrap > input")[0]

# 4)用xpath方法查找输入框
inputTag = driver.find_element_by_xpath("//input[@id='kw']")

print(inputTag)
inputTag.send_key('python')

# 1、如果只是想要解析网页中的数据 那么推荐将网页源代码扔给lxml来解析。因为lxml底层使用的是c语言,所以解析效率会更高。
# 2、如果是想要对元素进行一些操作,比如给一个文本框输入值,或者是点击某个按钮,那么就必须使用selenium给我们提供的查找元素的方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值