• 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")
    
    
  • 相关阅读:
    成都58同城快速租房的爬虫,nodeJS爬虫
    `qs.parse` 的简单实现
    使用windbg定位内存问题【入门级】
    C#正则实现匹配一块代码段
    Zeebe服务学习3-Raft算法与集群部署
    Zeebe服务学习2-状态机
    Zeebe服务学习1-简单部署与实现demo
    C#后端接收前端的各种类型数据
    大话设计模式--单例模式具体使用
    大话设计模式--DI(依赖注入)
  • 原文地址:https://www.cnblogs.com/Collin-pxy/p/13143659.html
Copyright © 2020-2023  润新知