图片来源网络

写在前面

最近在学习python,总想着自己动手弄一个简单一点的程序。于是想到了使用python和selenium爬小说

说起小说,想起了自己的一段“过往”。

我以前不太喜欢看书,但是从高中的时候开始接触了言情小说,并且一发不可收拾,很是沉迷。可能是青春期吧...... (〃'▽'〃)

那时候看言情小说都是同学之间相互借阅着看的,小说、杂志。杂志像是《花火》一类的。高中时代,也没有什么钱天天买这些,都是些零花钱省下来买的

到了大学,有了手机以后都是从网上下载到手机上看的。算了一下,大学的时候看的小说比较多,感觉有100多本....还不止。因为我有一个专门放小说的U盘,保存着我觉得好看的小说,里面的言情小说就有70多本

当时觉得好看的小说,现在都被拍成了电视剧。比如《步步惊心》、《何以笙箫默》、《三生三世十里桃花》等等,感觉挺好的

目标网站

这次要爬的网站是晋江文学城的小说,晋江文学城有免费的小说,可以在线看。但是如果要下载下来是需要晋江币的

现在的目标就是,下载已经完结的免费小说。这是免费小说的地址

网站截图

爬小说思路

总的思路为:

1、打开免费小说页面

2、新建文件夹,用于保存爬取的小说,路径为D:\novel

3、获取所有免费已完结小说的名字、小说链接地址,结果保存到数组

4、打开步骤3中获取的小说名,通过小说名,在路径D:\novel下创建对应的txt文件,用于保存小说。通过小说链接,获取当前小说的所有章节名称、章节链接地址,结果保存到数组

5、打开步骤4中的每一章节,将小说内容保存到对应的txt文件中

6、判断有没有下一页小说列表,有的话从执行步骤3,直到没有下一页的小说列表为止

编写代码

以下是我编写的python代码,仅供参考...... ヽ( ̄▽ ̄)ノ

#coding=utf-8

from selenium import webdriver

import os

#设置浏览器驱动,chromedriver.exe为我本机下载好的浏览器驱动

driver = webdriver.Chrome('C:\Users\yangbizhen\AppData\Local\Google\Chrome\Application\chromedriver.exe')

#最大化窗口

driver.maximize_window()

currentPage = 'http://www.jjwxc.net/bookbase_slave.php?booktype=free'

dirPath = 'D:\\novel\\'

path=dirPath.strip()

path=path.rstrip("\\")

if not os.path.exists(path):

os.makedirs(path)

def getChapters(driver):

chapter_name_list = []

chapter_link_list = []

chapter_tr_list = driver.find_element_by_class_name('cytable').find_elements_by_tag_name("tr")

for i in range(len(chapter_tr_list)):

chapter_tr = chapter_tr_list[i]

if len(chapter_tr.find_elements_by_tag_name('td'))< 2 or chapter_tr.find_elements_by_tag_name('td')[0].text=='章节':

continue

chapterName = chapter_tr.find_elements_by_tag_name('td')[1].text

try:

chapterUrl = chapter_tr.find_elements_by_tag_name('td')[1].find_element_by_xpath('span').find_element_by_xpath('div').find_element_by_xpath("a").get_attribute("href")

except:

i = i - 1

continue

chapter_name_list.append(chapterName)

chapter_link_list.append(chapterUrl)

#print (chapterName+' '+chapterUrl+'\n')

return chapter_name_list ,chapter_link_list

#获取小说列表

def getNovels(driver):

novel_name_list = []

novel_link_list = []

novel_tr_list = driver.find_element_by_class_name('cytable').find_elements_by_tag_name("tr")

for i in range(len(novel_tr_list)):

novel_tr = novel_tr_list[i]

if novel_tr.find_elements_by_tag_name('td')[4].text == '已完成':

novelName = novel_tr.find_elements_by_tag_name('td')[1].text

try:

novelUrl = novel_tr.find_elements_by_tag_name('td')[1].find_element_by_xpath("a").get_attribute("href")

except:

i = i - 1

continue

novel_name_list.append(novelName)

novel_link_list.append(novelUrl)

#print (novelName+' '+novelUrl+'\n')

return novel_name_list, novel_link_list

#获取每一页小说

def getPageNovel(driver):

novel_name_list, novel_link_list = getNovels(driver)

for i in range(len(novel_link_list)):

fileName = dirPath + novel_name_list[i] +'.txt'

file = open(fileName,'w')

file.write(novel_name_list[i] +'\n')

print ('open url: '+novel_name_list[i]+' '+novel_link_list[i])

driver.get(novel_link_list[i])

chapter_name_list ,chapter_link_list = getChapters(driver)

for j in range(len(chapter_link_list)):

#print ('open chapter: '+chapter_name_list[j]+' '+chapter_link_list[j])

try:

driver.get(chapter_link_list[j])

novelText = driver.find_element_by_xpath('//*[@id="oneboolt"]/tbody/tr[2]/td[1]/div')

text = novelText.text

text = text.strip('[收藏此章节] [下载] [免费得晋江币] [举报] ')

text = text.strip('插入书签')

file.write(text)

file.write('\n')

except:

print ('超时重试')

j = j - 1

file.close()

def haveNextPage():

if is_element_exist('/html/body/div[10]/span[2]/a'):

return True

return false

while True:

driver.get(currentPage)

getPageNovel(driver)

if haveNextPage:

driver.get(currentPage)

currentPage = driver.find_element_by_xpath('/html/body/div[10]/span[2]/a').get_attribute("href")

else:

break

#driver.quit()

运行结果

在家用无线总是会断网,于是在公司找了一台空闲的机器,有线网络的情况下,大约从下午2点运行到下午5点半的爬取结果如下:

运行结果

写在最后

包括建议以及接下来的学习方向:

1、需要注意的地方是,chromedriver与chrome版本是有关系的,具体可以参考博客selenium之 chromedriver与chrome版本映射表(更新至v2.40)

2、现在用的是单线程的方式爬小说,是否可以考虑多线程的方式?

3、这个例子用的是selenium框架,是否可以考虑使用Scrapy?

4、程序运行过程中的健壮性?

python爬收费小说_使用python+selenium爬小说相关推荐

  1. Python爬虫:最牛逼的 selenium爬取方式!

    Python爬虫:最牛逼的 selenium爬取方式! 作为一个男人 在最高光的时刻 这是小编准备的python爬虫学习资料,加群:700341555即可免费获取! Python爬虫:最牛逼的 sel ...

  2. 用python爬小说_使用python+Scrapy爬小说

    图片来源网络 写在前面 最近在学习python,不得不说python真是好用,至少生成程序的速度快,语法也比较简单 ヾ(◍°∇°◍)ノ゙ 感觉很强大,之前怎么就没有想到学一下这个呢,如果大学抢课的时候 ...

  3. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!

    今天,我们利用Python 中的selenium爬取网易云音乐中林俊杰<将故事写成我们>的评论,具体界面如下: 私信小编01 获取数十套PDF!爬虫 web都有的呢! 具体代码如下: #此 ...

  4. python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  5. python编程免费小说_使用Python开发小说下载器,不再为下载小说而发愁

    有点荒废 这几天有点荒废,之前弃坑的网文<伏天氏>,这几天又给捡起来了.然后一发不可收拾的只想看小说,荒废了我的学习.在这里我要检讨啊..... 像我这样的穷人,看小说肯定是找免费的网站, ...

  6. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  7. python制作pdf教程_学以致用:Python爬取廖大Python教程制作pdf!

    学以致用:Python爬取廖大Python教程制作pdf! python-tutorial-pdf 当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个 ...

  8. python自动排课表_利用python爬取广西科技大学教务管理信息系统班级课表

    操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...

  9. python唯美壁纸_用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)

    参考文章:https://www..com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只是很久之前学过 ...

最新文章

  1. C#温故而知新学习系列之.NET框架高级特性—概述.NET框架中的反射(一)
  2. Jenkins之邮件通知
  3. Visual C# 2010 实现资源管理器
  4. 工作中如何使用线程池的?自己如何定义一个线程池?
  5. IB纪录(十七):At the heard of the image
  6. 基于域名的apache服务器
  7. Java Web整体异常处理
  8. java 线程 wait sleep_JAVA线程sleep和wait方法区别
  9. java 高并发 订单编号递增(解决方案)
  10. linux英文包安装教程视频,Linux源码包安装过程讲解
  11. PHP验证码代码_php验证码类
  12. 一份简单、直接、高效的中文求职信模板,一般是直接写在邮件正文中。
  13. 思翼FM30高频头蓝牙数传连接地面站远距离通信功能
  14. JQuery键盘控制图片
  15. 修改下拉状态栏点击屏幕录制后出现ANR。禁用Hotspot tethering菜单下的 “Wi-Fi hotspot。默认系统语言为英文。
  16. 计算机组成原理ACC MQ,计算机组成原理讲案第一章.ppt
  17. Redis实战篇一 (短信登录)
  18. 关于swiper在移动端,快速上下滑动出现白边的解决办法
  19. 秉火429笔记之十八 ETH--以太网
  20. Programmer-如何从菜鸟变成老鸟?

热门文章

  1. 华北电力大学计算机科学,华北电力大学计算机科学与技术系介绍
  2. Java 中 Integer 源码学习之缓存池了解
  3. 2017移动端UI设计规范模板参考以及设计规范的好处
  4. 北京某公司前端笔试题及其答案
  5. 【Neo4j】第 5 章:空间数据
  6. 计算机应用基础3阶段在线作业,《计算机应用基础》第四阶段在线作业(自测)
  7. Zabbix的自动发现
  8. 二维矩阵乘法、矩阵转置、 矩阵与向量乘法(java实现)
  9. JAVA初/中/高级程序员必须知道的知识
  10. FFmpeg4编程入门---视频篇