此程序只是单纯的为了练习而做,首先这个顶点小说非收费型的那种小说网站(咳咳,我们应该支持正版,正版万岁,✌)。经常在这个网站看小说,所以就光荣的选择了这个网站。此外,其实里面是自带下载功能的,而且支持各种格式:(TXT,CHM,UMD,JAR,APK,HTML),所以可能也并没有设置什么反爬措施,我也只设置了请求头。然后内容是保存为txt格式。

  内容涉及到request的使用(编码问题),xpath的使用,字符串的处理(repalce产生列表达到换行效果),文件I/O

  顶点小说:https://www.booktxt.net

代码功能:输入小说名,若顶点小说中存在,则可直接下载。最终效果如下:

 # -*- coding:utf-8 -*-
import requests
from lxml import etree novel_name = '' #全局变量,存放小说名称
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} def get_url(name):
'''
通过百度获取小说在顶点小说中的网址
name:小说名
'''
#site: booktxt.net + 小说名 指定为该网站搜索
baidu = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=site%3A%20booktxt.net%20'+name #获取该小说在顶点小说中的网址
r = requests.get(baidu, headers=headers)
html = etree.HTML(r.content)
try:
#提取网址链接,若不存在则退出程序
url = html.xpath('//*[@id="1"]/h3/a/@href')[0]
url =requests.get(url, headers=headers).url
except:
print("该小说不存在!")
exit(0)
if url[-4:] == 'html': #搜索结果为某一章节,结果无效
print("该小说不存在!")
exit(0)
get_chapter(url) #获取小说章节 def get_chapter(url):
'''
获取搜索到的小说名,并询问是否下载 :param url: 小说的链接
'''
global novel_name r = requests.get(url=url,headers=headers)
coding = r.apparent_encoding #获取网页编码格式 html = etree.HTML(r.content, parser=etree.HTMLParser(encoding=coding)) novel_name = html.xpath('//*[@id="info"]/h1/text()')[0]
print('小说名:'+novel_name+'\n是否下载?是/否\n')
flag = input()
if flag=='否':
print('退出系统')
exit(0) list = html.xpath('//*[@id="list"]/dl/dd[position()>8]') #获取章节列表
for item in list:
chapter_name = item.xpath('./a')[0].text #每一章的名称
print(chapter_name)
link = item.xpath('./a/@href')[0] #每章的网址链接
full_link = url+link #每章的完整地址
print(full_link)
get_text(chapter_name,full_link) def get_text(name,link):
'''
获取每章的内容并写入至txt文件中
:param name: 小说章节名
:param link: 章节链接
:return:
''' r = requests.get(url=link, headers=headers)
coding = r.apparent_encoding
r = r.content html = etree.HTML(r, parser=etree.HTMLParser(encoding=coding))
#获取一章内容,并以空格为界分割成字符串列表
text = html.xpath('string(//*[@id="content"])').split()
#print(text)
#创建小说名.txt文件
with open('{}.txt'.format(novel_name),'a+',encoding='utf-8') as f:
f.write('\t'*3+name+'\n') #章节名
for i in range(len(text)):
f.write(' '*4+text[i]+'\n') if __name__ == '__main__':
novel_name = input('请输入小说名称:')
get_url(novel_name)

从“顶点小说”下载完整小说——python爬虫的更多相关文章

  1. 小说免费看!python爬虫框架scrapy 爬取纵横网

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  2. 批量下载小说网站上的小说(python爬虫)

    随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...

  3. python爬虫之小说网站--下载小说(正则表达式)

    python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...

  4. 初次尝试python爬虫,爬取小说网站的小说。

    本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...

  5. Python爬虫-爬小说

    用途 用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊. 如果下载不到txt,那不如自己把txt爬下来好了. 功能 将小说取回,去除HTML标签 记录已爬过 ...

  6. Python爬虫中文小说网点查找小说并且保存到txt(含中文乱码处理方法)

    从某些网站看小说的时候经常出现垃圾广告,一气之下写个爬虫,把小说链接抓取下来保存到txt,用requests_html全部搞定,代码简单,容易上手. 中间遇到最大的问题就是编码问题,第一抓取下来的小说 ...

  7. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  8. 如何用python爬虫从爬取一章小说到爬取全站小说

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  9. python爬虫小说代码,可用的

    python爬虫小说代码,可用的,以笔趣阁为例子,python3.6以上,可用 作者的QQ:342290433,汉唐自远工程师 import requests import refrom lxml i ...

随机推荐

  1. 【Leetcode】【Medium】Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  2. CALayer动画的暂停,恢复,以及结束时候的回调

    CALayer动画的暂停,恢复,以及结束时候的回调 源码如下: // // ViewController.m // AnimationLineView // // Created by YouXian ...

  3. Python学习---django之ORM语法[对象关系映射]180124

    ORM语法[对象关系映射] ORM: 用面向对象的方式去操作数据库的创建表以及增删改查等操作. 优点:1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句.快速开发. 2 ...

  4. 沉淀再出发:如何在eclipse中查看java的核心代码

    沉淀再出发:如何在eclipse中查看java的核心代码 一.前言   很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进 ...

  5. Azure 负载均衡器介绍

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. Azure 负载均衡器 ...

  6. C语言基础笔试题一

    1.下面的代码输出什么?为什么? void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6)?puts(">6&quo ...

  7. ZooKeeper教程(一)----Centos7下安装ZooKeeper(单机版)

    1.下载源码 官网下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/ 选择最新的版本进行下载 这里选择3.4.10进行下载: wget http:// ...

  8. Input and Output-The input is all the sources of action for your app

    Programs take input and produce output. The output is the result of doing something with the input. ...

  9. 以太网,IP,TCP,UDP数据包分析

    http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 网络层的IP 协议是构成Internet 的基础.IP 协议不保证传 ...

  10. ubuntu ibus 输入法总在左下角不跟随光标的处理

    sudo apt-get install ibus-gtk ibus-gtk3 ibus-qt4 参考文章