zoukankan      html  css  js  c++  java
  • Spider_基础总结6--动态网页抓取--selenium

    # 有些网站使用 ‘检查元素’也不能够好使,它们会对地址进行加密,此时使用Selenium 调用浏览器渲染引擎可以模拟用户的操作,完成抓取:
    # 注:selenium既可以抓取静态网页也可以抓取动态网页。
    # selenium的安装及 webdriver的安装见之前发的selenium专题博客。
    
    # 首先补充点 CSS selector的知识:https://blog.csdn.net/hou_angela/article/details/80519718
    
    
    from selenium import webdriver
    browser = webdriver.Firefox(executable_path = r'C:Users12078Desktopgeckodriver-v0.26.0-win64geckodriver.exe')
    browser.get("http://www.santostang.com/2018/07/04/hello-world/")
    
    browser.maximize_window()
    browser.page_source  # 获取网页源代码
    

    # 当有 frame 存在时:
    from selenium import webdriver
    browser = webdriver.Firefox(executable_path = r'C:Users12078Desktopgeckodriver-v0.26.0-win64geckodriver.exe')
    browser.get("http://www.santostang.com/2018/07/04/hello-world/")
    browser.maximize_window()
    
    print("--进入 frame--")
    browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
    # content=browser.find_element_by_css_selector('div.reply-content').find_element_by_tag_name('p')  
    #【根据className属性定位(注意class属性使用.)】
    # 或者使用后代选择器:
    content=browser.find_element_by_css_selector('div p')
    print (content.text)
    

    # 爬取 http://www.santostang.com/2018/07/04/hello-world/ 页面的所有的评论。
    # 没有成功,垃圾教程。
    
    from selenium import webdriver
    import time
    browser = webdriver.Firefox(executable_path = r'C:Users12078Desktopgeckodriver-v0.26.0-win64geckodriver.exe')
    browser.implicitly_wait(20) # 隐性等待,最长等20秒
    browser.get("http://www.santostang.com/2018/07/04/hello-world/")
    time.sleep(5)
    for i in range(0,3):
        # 下滑到页面底部
        browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 转换iframe,再找到查看更多,点击
        browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
        load_more = browser.find_element_by_css_selector('button.more-btn')
        load_more.click()
        # 把iframe又转回去
        browser.switch_to.default_content()
        time.sleep(2)
    browser.switch_to.frame(browser.find_element_by_css_selector("iframe[title='livere']"))
    comments = browser.find_elements_by_css_selector('div.reply-content')
    for eachcomment in comments:
        content = eachcomment.find_element_by_tag_name('p')
        print (content.text)
        
    
    # Selenium的高级操作:
    
    # 有一些方法可以用Selenium控制浏览器的加载的内容,从而加快Selenium的爬取速度。常用的方法有:
    # 1. 控制CSS的加载
         因为抓取过程中仅仅抓取页面的内容,CSS样式文件是用来控制页面的外观和元素放置位置的,对内容并没有影响,所以我们可以限制网页加载CSS,从而减少抓取时间
    # 2. 控制图片文件的显示
    # 3. 禁用 flash
    # 4. 控制JavaScript的执行
    
    
    from selenium import webdriver
    
    # 禁用css
    fp = webdriver.FirefoxProfile() 
    fp.set_preference("permissions.default.stylesheet",2) # 某些firefox只需要这个
    fp.set_preference('browser.migration.version', 9001) # 部分需要加上这个
    
    # 禁用图片
    fp.set_preference("permissions.default.image",2)
    
    # 禁用flash
    fp.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')
    
    # 禁用js
    fp.set_preference("javascript.enabled", False)
    
    browser = webdriver.Firefox(executable_path = r'C:Users12078Desktopgeckodriver-v0.26.0-win64geckodriver.exe',firefox_profile=fp)
    browser.get("http://www.santostang.com/2018/07/04/hello-world/")
    browser.maximize_window()
    print("end")
    
    
  • 相关阅读:
    利用qt打开一张图片并转成灰度矩阵
    适配手机端浏览器
    ps常用快捷键(供自己学习查看)
    用选框工具画圆角矩形
    ps制作有背景图片的字体
    所有iOS 设备的屏幕尺寸
    九宫格有规律高亮滚动效果
    移动端点击事件全攻略
    移动端ios升级到11及以上时,手机弹框输入光标出现错位问题
    linux下截取整个网页
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13143659.html
Copyright © 2011-2022 走看看