zoukankan      html  css  js  c++  java
  • 使用webdriver扒取网站小说(一)-----基础篇

    由于之前一直在做手工测试,刚刚接触到自动化测试,并且认识了webdriver这个工具,所以说想用这个工具来搞事情,正巧自动化测试中有读取文本的方法,所以我灵机一动,准备用webdriver来拔取我最近看的小说,并把它下载到本地的text文件中。

    1.准备工作

    环境:python3

    工具:eclipse+pydev

    依赖包:selenium

    驱动:chromeDriver/geckodriver/iedriver(一个就行)

    个人水平:刚开始接触自动化测试的萌新,安装了python环境和编辑器,并且下载过驱动和selenium包,如果没有的话,请查看这篇博客

    http://blog.csdn.net/ccggaag/article/details/72650411

    2.思路

    首先我们进入  http://www.biquge.com/0_249      这个页面,也就是包含所有的章节目录的这个页面,我的思路是每次点击章节进入这章的页面,然后获取到章节的内容后,再返回到目录页面,进入到下一章页面

    2.1 目录的逐个访问



    我们发现,最后一章和第一章的xpath(路径)只是数字上的区别,所以我们把.//*[@id='list']/dl/dd[2059]/a    这个路径分成三部分:
    a=".//*[@id='chapterslist']/dl/dd["
    b = 0
    c="]/a"
    每次把b增加1,然后循环的通过xpath定位后点击进入章节内容的页面。

    2.2 章节内容的获取


    通过火狐浏览器的插件:firebug和firepath获取到xpath

    3.脚本实现

    from selenium import webdriver
    import time
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By   
    import logging
    import sys
    
    #准备阶段
    driver = webdriver.Chrome()
    f = open("黑铁之堡.txt","w")
    #生成日志文件
    logger = logging.getLogger()
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
    file_handler = logging.FileHandler("黑铁之堡.log")
    file_handler.setFormatter(formatter)  # 可以通过setFormatter指定输出格式
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.formatter = formatter 
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    logger.setLevel(logging.INFO)
    
    #基本属性
    a=".//*[@id='list']/dl/dd["
    b = 9
    c="]/a"
    
    #封装方法
    def count(b):
        b= b+1
        return b
    
    def url(url):
        return (a+str(url)+c)
    
    #打开目录页
    driver.get("http://www.biqudu.com/0_249/")
    
    #循环获取xpath
    while b<2059:
        try:
            b= count(b)
            print(url(b))
            
           #xpath是目录页底部的一个元素的路径,为了确保页面加载完
            WebDriverWait(driver,3,0.5).until(EC.presence_of_element_located((By.XPATH,".//*[@id='footer']/div[2]/p[1]")))
            ele=driver.find_element_by_xpath(url(b))
            newUrl =ele.get_attribute("href")
            #获取到这章的Url,然后访问这章
            logger.info(newUrl )
            driver.get(newUrl )
            #标题
            title = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.XPATH,".//*[@id='wrapper']/div[5]/div[2]/div[2]/h1")))
            #内容
            text = WebDriverWait(driver,3,0.5).until(EC.presence_of_element_located((By.XPATH,".//*[@id='content']")))
            #写入到txt文件,记得加入换行:
    
            f.write(title.text)
            f.write("
    ")
            f.write(text.text)
            f.write("
    ")
            #日志记录章节的信息
            logger.info(title.text)
            logger.info(b)
            #返回目录页
            driver.back()
        except:
            #如果由于网络等原因无法获取到,那么重新进入目录页
            logger.error(Exception)
            driver.get("http://www.biqudu.com/0_249/")
            b= b-1
    
    #关闭文件和driver驱动
    driver.close()   
    f.close()
    


    然后我们就得到了小说的txt和日志文件啦


  • 相关阅读:
    设计模式之原型模式
    设计模式之建造者模式
    一个工厂还能写出花来?
    一个单例还能写出花来?
    python基础之条件循环语句
    python基础之七种运算符
    python基础之五大标准数据类型
    node.js express mvc轻量级框架实践
    js Date() 浏览器兼容问题解决
    js 倒计时(服务器时间同步)
  • 原文地址:https://www.cnblogs.com/CCGGAAG/p/7800343.html
Copyright © 2011-2022 走看看