美文网首页呆鸟的Python数据分析
基于Python+Selenium+Chrome headles

基于Python+Selenium+Chrome headles

作者: 萧风_c200 | 来源:发表于2018-09-27 14:07 被阅读510次

    1. 概述

    基于Python, Selenium, Chrome headless (无头浏览器) 访问页面, 并将内容保存到本地文件.

    初步干了一次爬数据的工作,写一写入门的心得.分享一下,不足之处未来逐步完善.

    2. 环境准备

    Python 3.6.5 

        注:这个附带的工具 IDLE (Python 3.6 64-bit) 调试很方便.按F5就行了

    Selenium 2.0 

        注: 需要带 WebDriver 

    Chrome 59以上版本可以运行Headless模式

    3. 代码实例

    主要功能与步骤

    1) 使用chrome headless 模式打开页面

    2) 根据页面标签,利用Selenium 定位需要查找和分析页面相关内容

    3) 将有用的功能,写入指定文件

    废话不多直接上代码

    # 引入休眠等待库

    import time

    # 引入selenium的浏览器驱动接口

    from selenium import webdriver

    # 引入chrome选项

    from selenium.webdriver.chrome.options import Options

    # 配置chrome浏览器(无头模式)

    chrome_options = Options()

    chrome_options.add_argument('--headless')

    driver = webdriver.Chrome(chrome_options=chrome_options)

    # 没有写错,就是要页面够长.不然页面内容会点不到 (第一个坑)

    driver.set_window_size(1024, 7680)

    # 加载页面

    driver.get("https://www.example.com")

    # 这里进行嵌套,模拟点击打开详细页,可以抓取详细内容

    for i in range(1,21):

        # 根据css中的class查找对应的element 集合

        counts = len(driver.find_elements_by_css_selector(".item_con_list .position_link"))

        print ("第" + str(i) + "页,本页共有:" + str(counts) + "条记录")

        for j in range(counts):

            # 新开一个窗口

            url = driver.find_elements_by_css_selector(".item_con_list .position_link")[j]

            print('  跳转第' + str(j) + "条:" + url.get_attribute("href"))

            url.click()

            time.sleep(1)

            # 获取当前窗口句柄集合

            handles = driver.window_handles

            # 切换窗口

            for handle in handles:

                if handle!=driver.current_window_handle:

                    driver.switch_to_window(handle)

                    # 找到内容

                    try:

                        data = driver.find_element_by_class_name("job_bt").text

                    except:

                        print("这个页面没拿到内容")

                        driver.save_screenshot(i+str(j)+".png")

                    # 写入内容 ,要保持编码一致,不然会出现保存出错 (第二个坑)

                    fileObject = open('example.txt', 'a', encoding='utf-8')

                    fileObject.write(data) 

                    fileObject.write('\n') 

                    fileObject.close()

                    break

            #关闭当前窗口   

            driver.close()

            #切换(主)窗口

            driver.switch_to_window(handles[0])

            time.sleep(1)

            #生成当前页面快照,调试用的

            driver.save_screenshot("current.png")

        # 跳转到下一页

        driver.find_element_by_class_name("pager_next").click()

        print("跳转到下一页")

        time.sleep(5)

    # 关闭浏览器

    driver.quit()

    相关文章

      网友评论

        本文标题:基于Python+Selenium+Chrome headles

        本文链接:https://www.haomeiwen.com/subject/jljeoftx.html