zoukankan      html  css  js  c++  java
  • (五)selenuim和phantonJs处理网页动态加载数据的爬取

     selenuim和phantonJs处理网页动态加载数据的爬取

    一 图片懒加载

    • 自己理解------就是在打开一个页面的时候,图片数量特别多,图片加载会增加服务器的压力,所以我们在这个时候,就会用到---懒加载,,网页解析是从上往下的。在解析的过程里,如果遇见资源了,浏览器会再次请求的。但是一个网页可能存在很多请求的资源。
    • 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”
    • 网站一般如何实现图片懒加载技术呢?

      • 在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

    '''
    站长素材为例  http://sc.chinaz.com/
    下载里面的高清图片
    '''
    import requests
    from lxml import etree
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }
    
    url = 'http://sc.chinaz.com/tupian/eluosi.html'
    
    page_text = requests.get(url=url, headers=headers).text
    
    tree = etree.HTML(page_text)
    div_list = tree.xpath('//div[@id="container"]/div')
    
    for div in div_list:
        img_url = div.xpath('./div/a/img/@src2')[0]  # ./div/a/img/@src
        # print(img_url) #打印的是空值,因为在爬虫时没有拿到真正的url,我们需要将src改成src2就可以了
    
        pic = requests.get(url=img_url,headers=headers).content
        print(pic)
        imgName = img_url.split('/')[-1]
        filePath = './pic/' + imgName
        with open(filePath,'wb') as f:
            f.write(pic)

    二.selenium

    1 什么是selenium

      selenium是python中对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作.

    2 环境搭建

      安装 pip install selenium

      获取某一款浏览器的驱动程序(以谷歌浏览器为例)

    • 谷歌浏览器驱动下载地址:http://chromedriver.storage.googleapis.com/index.html

    • 下载的驱动程序必须和浏览器的版本统一,大家可以根据http://blog.csdn.net/huilan_same/article/details/51896672中提供的版本映射表进行对应

    import time
    from selenium import webdriver
    
    b = webdriver.Chrome(executable_path=r'D:爬虫part_one驱动chromedriverchromedriver.exe')  #   上面下载的驱动
    time.sleep(4)
    
    url = 'http://www.baidu.com'
    b.get(url=url)
    
    myText = b.find_element_by_id('kw')  # 找到百度的input框 输入 '美女'
    myText.send_keys('美女')
    
    myButton = b.find_element_by_id('su') # 找到百度的按钮 
    myButton.click()
    time.sleep(5)
    
    b.quit()

    三.phantomJs

    PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现

    import time
    from selenium import webdriver
    
         # PhantomJS b
    = webdriver.PhantomJS(executable_path=r'C:UsersxxxxxxDesktop课上代码part_one4.selenium&phantomjs
                   phantomjs-2.1.1-windowsinphantomjs.exe
    ') time.sleep(4) url = 'http://www.baidu.com' b.get(url=url) b.save_screenshot('./1.png') # 加一个截图 myText = b.find_element_by_id('kw') myText.send_keys('美女') b.save_screenshot('./2.png') # 加一个截图 myButton = b.find_element_by_id('su') myButton.click() b.save_screenshot('./3.png') # 加一个截图 time.sleep(5) b.quit()
  • 相关阅读:
    ecplise自动提示失效,使用补全自动提示快捷键(Alt+/),但只显示“No Default Proposals”
    maven构建ssh工程
    pom.xml中坐标的组成
    依赖传递的规则
    maven中导入包版本冲突的解决
    maven工程的拆分与聚合
    maven的生命周期
    maven的常用命令
    在pom.xml中引入jar包坐标的依赖范围
    【stl的神奇操作】用集合搞定区间相交
  • 原文地址:https://www.cnblogs.com/a438842265/p/10179686.html
Copyright © 2011-2022 走看看