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

  网站抽风多了一个正文一栏,这样的话就会重复下载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. c++中各类型数据所占字节数(二)

    转自:https://blog.csdn.net/allen_tony/article/details/76973906 https://blog.csdn.net/zzwdkxx/article/d ...

  2. nginx反向代理后应用程序如何获取客户端真实IP

    每个location中增加配置: proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_se ...

  3. 银行卡卡bin

    卡BIN指的是发卡行识别码,英文全称是 Bank Identification Number,缩写为 BIN.中文即“银行识别代码”  银行卡的卡号是标识发卡机构和持卡人信息的号码 一般是13-19位 ...

  4. java.lang.NumberFormaException: For input String:"user"

    碰到这个问题的时候有点懵逼,很无力,网上一查是类型转换错误,贴上报错的JSP代码 最后找救兵,得出是hql的错误,举个例子: HibernateUtil.query("from user u ...

  5. JAVA中时间格式(SimpleDateFormat)和数字格式(DecimalFormat)转换详解(转)

    时间格式转换SimpleDateFormat: //定义日期的格式 SimpleDateFormat format =new SimpleDateFormat("yyMMdd"); ...

  6. javascript中的自定义属性

    标签的自定义属性: 在开发中,有时需要在标签上添加一些自定义属性用来存储数据或状态. 设置了自定义属性的标签,就是在这个标签上添加了这个属性,浏览器中的html结构中可以看到. 使用点语法(如oWra ...

  7. css自定义滚动条

    有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了.那webkit浏览器是如何自定义滚动条的呢? 前言 ...

  8. Unity资源内存管理--webstream控制

    一 使用前提 1,需要使用资源热更新 2,使用Assetbundle资源热更(AssetBundle是产生webstream的元凶) 二 为什么要用AssetBundle AssetBundle本质上 ...

  9. kali linux 配置嵌入式开发环境

    kali linux 2018.2 x64 一.支持i386库 如果你是64位的Kali Linux系统,用如下命令添加i386架构支持到你的开发环境. dpkg --add-architecture ...

  10. 安装oracle数据库的操作步骤

    1. vnc启动之后,进入数据库安装包所在目录,此处是/home/DB/backup/database 2. 输入命令 ./runInstaller 3. 弹出linux图形化界面,同时弹出Oracl ...