使用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 = 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文件,记得加入换行:\n
f.write(title.text)
f.write("\n")
f.write(text.text)
f.write("\n")
#日志记录章节的信息
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和日志文件啦

浙公网安备 33010602011771号