第一次更新:发现一个问题,就是有时候网页排版有问题的话容易下载到多余章节,如下图所示:

  网站抽风多了一个正文一栏,这样的话就会重复下载1603--1703章节。

  解决办法:

    于是在写入内容前加了一个章节判断,让内容获取从第一章开始,这样就能避免此类问题。如下图:

  这个是对最近学习的一次总结吧。前两天写的,今天才有时间写博客。

  偶然点开笔趣阁的网址(https://www.biquge.cc/),突然觉得我应该可以用爬虫实现小说下载。有这个想法我就开始尝试了。

  

  爬虫呀,说白了就是程序自动模拟浏览器操作来获取网页的内容。

  先用F12查看元素,查看章节网址链接,和章节正文内容。

  结构很简单。

  想法很快就有了,通过网站的搜索打开小说详情页,然后获取每一章的网址url,依次访问每一章网址,再通过正则表达式匹配章节内容,

最后将匹配的内容保存到本地。

  中间忘了一个小的知识点,就是我使用re.findall()来匹配的,它最后返回的时一个列表!!!

  运行结果如下图:

  

  

  代码如下:

  

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/10/20 15:46
# @Author : yuantup
# @Site :
# @File : biquge.py
# @Software: PyCharm
import urllib.request
import re
import time
import os def open_url(url):
# 打开网址专用
# 以字典的形式设置headers
head = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
# 'Accept-Encoding': 'gzip',
# 接受编码如果是gzip,deflate之类的,可能会报错
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'sou.xanbhx.com',
'Referer': 'https://www.biquge.cc/',
'Upgrade-Insecure-Requests': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/63.0.3239.132 Safari/537.36', }
# 设置cookies
# proxy = urllib.request.ProxyHandler({'http': '127.0.0.1:8888'})
opener = urllib.request.build_opener()
# 遍历字典,将其转换为指定格式(外层列表,里层元组)
headers = []
for key, value in head.items():
item = (key, value)
headers.append(item)
opener.addheaders = headers
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
html = response.read()
time.sleep(1)
return html def novel_detail(book_name):
# 根据传入的小说名字获取到小说的详情页,并提取出小说内容(详情,每个章节的网址)
# 小说存在重名情况!!!待解决
zh_book_name = urllib.request.quote(book_name)
url = 'https://sou.xanbhx.com/search?siteid=biqugecc&q=' + zh_book_name
html = open_url(url).decode('utf-8')
# print(html)
name_pa = '<span class="s2">.*?<a href="(.*?)" target="_blank">.*?(\S*?)</a>'
name_list = re.findall(name_pa, html, re.S)
# print(name_list[1])
if name_list[0][1] == book_name:
book_url = name_list[0][0]
print(book_url)
elif not name_list:
print('')
print('对不起,该网址没有找到你需要的书。')
return book_url def content(url):
# 获取小说正文
html = open_url(url).decode('utf-8')
# print(html)
main_body_pa = r'最新章节(提示:已启用缓存技术,最新章节可能会延时显示,登录书架即可实时查看。).*?<dt>(.*?)</div>'
chapter_url_pa = r'<a style="" href="(.*?)">'
main_body = re.findall(main_body_pa, html, re.S)
# print(main_body, ' 1')
# 记住re.findall()方法返回的时一个列表!!!
chapter_url = re.findall(chapter_url_pa, main_body[0])
# print(chapter_url, ' 2')
time.sleep(2)
return chapter_url def save_novel(novel_url, content_url_list, book_name):
# 保存小说内容
for i in range(len(content_url_list)):
real_url = novel_url + content_url_list[i]
html = open_url(real_url).decode('utf-8')
# print(html)
chapter_name_pa = '<h1>(.*?)</h1>'
chapter_name = re.search(chapter_name_pa, html).group(1)
# print(chapter_name)
# print(type(chapter_name))
content_pa = r'<div id="content">(.*?)<script>'
content1 = re.findall(content_pa, html, re.S)
content2 = content1[0].replace('&nbsp;&nbsp;&nbsp;&nbsp;', ' ')
content3 = content2.replace('<br/>', '\n')
content4 = content3.replace('</br>', '')
re_chapter_name = chapter_name.replace(' ', '')
content5 = content4.replace(re_chapter_name, '')
# 有些章节内容包括章节名,这里替换掉它们。
whole_content = ' ' + chapter_name + '\n' + content5
# print(whole_content)
# print(chapter_name)
with open(book_name + '.txt', 'a', encoding='utf-8') as f:
f.write(whole_content)
print('成功下载 {}'.format(chapter_name))
time.sleep(1) def main():
path = r'E:\spiser_sons\books'
a = os.getcwd()
print(a)
if os.path.exists(path):
os.chdir(path)
print(os.getcwd())
else:
os.mkdir(path)
os.chdir(path)
book_name = input('请输入想下载小说的名字:')
novel_url = novel_detail(book_name)
content_url_list = content(novel_url)
save_novel(novel_url, content_url_list, book_name) if __name__ == '__main__':
main()

还有几个问题有待解决:

  1.下载速度过慢,基本上一章2秒钟,几百万字的网文(1500+章)基本就要快一个小时了,亲测。。。。

  2.小说有重名的话就很麻烦,只会下载排第一的。不过这个再添加一个作者判断应该可以解决。

免app下载笔趣阁小说的更多相关文章

  1. python入门学习之Python爬取最新笔趣阁小说

    Python爬取新笔趣阁小说,并保存到TXT文件中      我写的这篇文章,是利用Python爬取小说编写的程序,这是我学习Python爬虫当中自己独立写的第一个程序,中途也遇到了一些困难,但是最后 ...

  2. bs4爬取笔趣阁小说

    参考链接:https://www.cnblogs.com/wt714/p/11963497.html 模块:requests,bs4,queue,sys,time 步骤:给出URL--> 访问U ...

  3. Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说

    注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...

  4. Python爬取笔趣阁小说,有趣又实用

    上班想摸鱼?为了摸鱼方便,今天自己写了个爬取笔阁小说的程序.好吧,其实就是找个目的学习python,分享一下. 1. 首先导入相关的模块 import os import requests from ...

  5. HttpClients+Jsoup抓取笔趣阁小说,并保存到本地TXT文件

    前言 首先先介绍一下Jsoup:(摘自官网) jsoup is a Java library for working with real-world HTML. It provides a very ...

  6. scrapycrawl 爬取笔趣阁小说

    前言 第一次发到博客上..不太会排版见谅 最近在看一些爬虫教学的视频,有感而发,大学的时候看盗版小说网站觉得很能赚钱,心想自己也要搞个,正好想爬点小说能不能试试做个网站(网站搭建啥的都不会...) 站 ...

  7. python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说

    使用cmd创建一个scrapy项目: scrapy startproject project_name (project_name 必须以字母开头,只能包含字母.数字以及下划线<undersco ...

  8. 笔趣阁小说 selenium爬取

    import re from time import sleep from lxml import etree from selenium import webdriver options = web ...

  9. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

随机推荐

  1. Nmap UDP扫描缓慢问题探究(无结果)

    一.说明 在网络原理中我们经常说TCP是面向连接的要进行三次握手和四次挥手所以速度比较慢,UDP是无连接的直接发送和接收所以速度快(说到这个快慢我总想起多年前有篇分析MSN为什么被QQ淘汰的一篇文章其 ...

  2. 四、Linux的常用命令

    linux常用命令可以参考这位前辈的:https://www.cnblogs.com/gaojun/p/3359355.html 这篇博文介绍的比较详细!

  3. validation-api各注解的用法

    入参用@Valid,要不下面实体类中的注解不生效 @AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为True@DecimalMax(value) 被注解的 ...

  4. LAMP分离搭建WordPress

    实验环境:centos6.5 php5.3.6 http2.4.35 yum安装mysql 关闭三台主机的Selinux.iptalbes 配置apache: 解压软件包 安装依赖包:pcre-dev ...

  5. python之路-变量

    变量定义的规则: - 变量名只能是字母.数字.或下划线的任意组合 - 变量名的第一个字符不能是数字 - 以下关键字不能声明为变量名  ['and','as','assert','break','cla ...

  6. dom编程艺术笔记2--第三章

    DOM 1.dom:简单理解为文档对象模型<==>节点树 2.宿主对象:浏览器提供的对象—>document对象 3. html标签为树顶点元素 head body为html子元素以 ...

  7. 前端校验框架ValidForm之check方法修正

    用过validform的朋友相信都知道,在利用check方法的时候,发现该方法对表单输入值只要符合datatype规则的就返回ture.那么我们想对某个字段进行ajax重复校验的时候,只需要在该表单元 ...

  8. ansible资产配置

    参考链接:https://www.cnblogs.com/iois/p/6403761.html ansible主机组的使用,我们在对一个集群进行管理的时候集群会有很多角色,在执行统一命令操作的时候我 ...

  9. 常见的操作系统及linux发展史

    目前我们常见的操作系统有: 1> 桌面操作系统 Windows 系列 用户群体大 macOS 适合于开发人员 Linux 应用软件少 2> 服务器操作系统 Linux 安全.稳定.免费 占 ...

  10. (2018 Multi-University Training Contest 2)Problem G - Naive Operations

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6315 题目大意:告诉你a,b两个数组,a数组初始化为0,b数组告诉你长度和具体值,接下来有q次操作,a ...