pathon爬虫 动态渲染页面爬取 /Selenium的使用/各种操作

1.什么是动态渲染页面爬取?
ajax方式也是动态渲染的一种,但是动态渲染并不止有ajax这一种,比如有些网页是由javascript生成的,并非原始html代码,这其中并不包含ajax请求,,比如Echarts官网,其图形都是经过javaScript计算之后生成的。还有就是淘宝这种网页,它既是是ajax获取的数据,但是其ajax接口含有很多加密参数,我们很难找出其中的规律,也很难直接分析ajax来抓取。

2.解决办法:
我们可以直接用模拟浏览器运行的方式来爬取,即可见即可爬,这样就不用去关心网页是由什么算法渲染页面,也不用去管后台的ajax接口到底有哪些参数。
python提供了很多模拟浏览器运行的库,如.Selenium,Splash,pyV8,Ghost等。

3.Selenium的使用:
3-1:安装Selenium : pip install xxx
3-2:Selenium是一个自动检测化工具,利用它可以驱动浏览器指定特定的动作,如点击,下拉等操作。
3-3:安装 谷歌 webdriver 参考下面文章:
https://blog.csdn.net/wwwq2386466490/article/details/81513888

4.Selenium的使用:

4-1:通过谷歌驱动打开百度, 输入Python, 回车,(显示等待),(异常获取),提取源码,再通过BeautifulSoup解析库操作数据。

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as  EC

from bs4 import BeautifulSoup
from time import sleep
# 异常
from selenium.common.exceptions import TimeoutException,NoSuchElementException
# 选择通过谷歌驱动打开网页 也可选择火狐,PhantomJS等浏览器
broser = webdriver.Chrome()

try:
    broser.get('https://www.baidu.com/') # 请求网址
    # 根据不同方式获取标签位置
    #根据id获取
    input = broser.find_element_by_id('kw')
    # 根据name 获取
    # input1 = broser.find_element_by_name('s_ipt')
    # # copy selector 获取
    # input2 = broser.find_element_by_css_selector('#kw')
    # # 根据xpath 获取
    # input3 = broser.find_element_by_xpath('//*[@id="kw"]')
    input.send_keys('Python') # 在标签id为 kw的 也就是文本框内 输入内容
    input.send_keys(Keys.ENTER) # 单击操作
    # 显示等待 (确保指定节点被加载出来) 更多呢等待条件 百度
    wait = WebDriverWait(broser,10)
    # 在指定时间内 指定id被加载出来 则打印源码 否则 抛出异常
    wait.until(EC.presence_of_element_located((By.ID,'content_left1')))

    # 打印信息
    print 'url : ' ,broser.current_url # 打印 url
    print 'cookies :',broser.get_cookies() # 打印 cookies
    print '源码 : ',broser.page_source # 源码
    # Selenium 通过谷歌驱动打开网页 获取到源码后 通过 BeautifulSoup等解析库 来操作所需数据
    soup =  BeautifulSoup(broser.page_source, 'lxml')
    # copy Selector
    values = soup.select('#s_tab > div > a')
    for v in values:
        print "v : " + v.get_text() # 获取a标签的值
except Exception as e:
    # 捕获异常 不影响程序
    print '异常了'
    print ('Error', e.args)

finally:
    # 休眠10秒 关闭浏览器
    sleep(10)
    broser.close()

4-2:下拉操作 (可以通过execute_script() 方法,通过执行javaScript 完成操作)

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as  EC

from bs4 import BeautifulSoup
from time import sleep
# 选择通过谷歌驱动打开网页 也可选择火狐,PhantomJS等浏览器
broser = webdriver.Chrome()

# 把进度条拖到最底部
broser.get('https://www.zhihu.com/explore') # 请求网址
broser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
broser.execute_script('alert("To Bottom")')

4-3:待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值