使用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和日志文件啦


原文地址:https://www.cnblogs.com/CCGGAAG/p/7800343.html