免app下载笔趣阁小说
第一次更新:发现一个问题,就是有时候网页排版有问题的话容易下载到多余章节,如下图所示:
网站抽风多了一个正文一栏,这样的话就会重复下载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(' ', ' ')
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下载笔趣阁小说的更多相关文章
- python入门学习之Python爬取最新笔趣阁小说
Python爬取新笔趣阁小说,并保存到TXT文件中 我写的这篇文章,是利用Python爬取小说编写的程序,这是我学习Python爬虫当中自己独立写的第一个程序,中途也遇到了一些困难,但是最后 ...
- bs4爬取笔趣阁小说
参考链接:https://www.cnblogs.com/wt714/p/11963497.html 模块:requests,bs4,queue,sys,time 步骤:给出URL--> 访问U ...
- Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说
注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...
- Python爬取笔趣阁小说,有趣又实用
上班想摸鱼?为了摸鱼方便,今天自己写了个爬取笔阁小说的程序.好吧,其实就是找个目的学习python,分享一下. 1. 首先导入相关的模块 import os import requests from ...
- HttpClients+Jsoup抓取笔趣阁小说,并保存到本地TXT文件
前言 首先先介绍一下Jsoup:(摘自官网) jsoup is a Java library for working with real-world HTML. It provides a very ...
- scrapycrawl 爬取笔趣阁小说
前言 第一次发到博客上..不太会排版见谅 最近在看一些爬虫教学的视频,有感而发,大学的时候看盗版小说网站觉得很能赚钱,心想自己也要搞个,正好想爬点小说能不能试试做个网站(网站搭建啥的都不会...) 站 ...
- python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说
使用cmd创建一个scrapy项目: scrapy startproject project_name (project_name 必须以字母开头,只能包含字母.数字以及下划线<undersco ...
- 笔趣阁小说 selenium爬取
import re from time import sleep from lxml import etree from selenium import webdriver options = web ...
- scrapy框架爬取笔趣阁
笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...
随机推荐
- 虚拟机如何固定ip并访问外网?!
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNor ...
- 【webpack学习笔记】a01-基础构建
webpack基于nodejs环境运行,首先确认已经安装了node.js. 基础构建流程 新建一个文件夹,这个就是你项目的根目录. 在命令行中使用npm init命令初始化npm,会得到一个 ==pa ...
- nginx + gunicorn + flask项目发布
程序安装(linux mint) gunicorn安装:pip install gunicorn nginx安装:sudo apt-get install nginx 配置 nginx默认配置信息在/ ...
- express3/4引入socket.io
app.js var express = require('express'); var path = require('path'); var session = require('express- ...
- react native第一天--------KnightRider
今天是2017年6月8,是我的项目react native-CRM(用户关系管理)的第一天,一早就配置了一上午Mac的环境,然后运行项目,在react-native init project的时候一直 ...
- python简单爬虫 使用pandas解析表格,不规则表格
url = http://www.hnu.edu.cn/xyxk/xkzy/zylb.htm 部分表格如图: 部分html代码: <table class="MsoNormalTabl ...
- python简单爬虫 用lxml解析页面中的表格
目标:爬取湖南大学2018年在各省的录取分数线,存储在txt文件中 部分表格如图: 部分html代码: <table cellspacing="0" cellpadding= ...
- ESP32搭建3.ubuntu14.04下搭建esp32开发环境 (10-5)
硬件为乐鑫出品的ESP32一款集成了wifi和蓝牙的集成模块. 1.首先ctrl+alt+t打开终端,sudo -s选择用root权限登陆 . 2. 输入指令:sudo apt-get install ...
- node.js学习5--------------------- 返回html内容给浏览器
/** * http服务器的搭建,相当于php中的Apache或者java中的tomcat服务器 */ // 导包 const http=require("http"); cons ...
- DevExpress ASP.NET Core Controls 2019发展蓝图(No.1)
本文主要为大家介绍DevExpress ASP.NET Core Controls2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...