热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python爬取小说写入txt_基于python爬取小说章节源代码内容存为文本实现小说下载...

应该算是我这个新人在吾爱的首贴了前言由于是py新人,所以代码可能不够简练,都是想到哪写到哪,但是看起来可能不会太吃力,应

应该算是我这个新人在吾爱的首贴了

前言

由于是py新人,所以代码可能不够简练,都是想到哪写到哪,但是看起来可能不会太吃力,应该还是比较好理解的

大神勿喷!

食用方法

1.首先需要python环境,这个网上教程也很多,我就不说明了

2.仅python 3的版本,3以下版本无法运行

3.不需要安装第三方库,一切操作基于标准库完成

爬取的对象:第三方小说网站:顶点小说网

以小说:修真聊天群 为例

首先打开修真聊天群章节目录,将目录的网址 http://www.booktxt.net/1_1439/ 复制后输入到命令行中,然后自动获取所有章节列表

然后就静静等待结束即可

后面有图,因为图链可能会挂。。。所以当附件上传了

源码

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import urllib.request

import re

import os

import time

import threading

import shutil

txt_content_partern = '

(.*?)
'

txt_name_partern = '

(.*?)'

catalog_partern = '

(.*?)'

flag = -1

max_len = 0

atalog = []

# 章节间隔

txt_max = 20

# 线程数量

max_thread = 20

thread_stop = 0

start_time = time.clock()

headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Cache-Control': 'max-age=0',

'Proxy-Connection': 'keep-alive',

'Host': 'http://www.booktxt.net',

'Referer': 'https://www.google.com.hk/',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'

}

def down_txt(url, txtname, filename):

# print(url)

fo = open(filename, "a")

for i in range(0, 10):

try:

html_data = urllib.request.urlopen(url).read().decode('gbk')

content = re.findall(txt_content_partern, html_data, re.S | re.M)

fo.write("\r\n" + txtname + "\r\n")

fo.write(content[0].replace(" ", "").replace("
", "").replace("\r\n\r\n", "\r\n").replace("<", "").replace("/p>", ""))

fo.close()

break

except:

if i &#61;&#61; 9:

print("请求失败次数过多&#xff0c;请重新下载")

print("请求失败&#xff0c;正在重试...")

time.sleep(0.5)

continue

def down_mul(url, cnt, file_path):

global flag, max_len, atalog, txt_max, thread_stop

down_flag &#61; 1

while flag * txt_max

flag &#43;&#61; 1

star &#61; flag * txt_max

end &#61; star &#43; txt_max

if star >&#61; end:

break

if end > max_len:

end &#61; max_len

print("正在抓取章节" &#43; str(star) &#43; &#39;-&#39; &#43; str(end) &#43; &#39;...&#39;)

down_flag &#61; 0

for i in range(star, end):

if i >&#61; max_len:

break

for j in range(0, 10):

try:

down_txt(url &#43; atalog[i][0] &#43; ".html", atalog[i][1], file_path &#43; &#39;\\&#39; &#43; str(star &#43; 1) &#43; &#39;.txt&#39;)

break

except:

if i &#61;&#61; 9:

print("请求失败次数过多&#xff0c;请重新下载")

print("请求失败&#xff0c;正在重试...")

time.sleep(0.5)

continue

thread_stop &#43;&#61; 1

if down_flag:

print("线程[" &#43; str(cnt) &#43; "]未获取到任务...")

else:

print("线程[" &#43; str(cnt) &#43; "]运行完毕...")

def main():

global atalog, max_len, thread_stop, max_thread, start_time

basic_url &#61; &#39;www.booktxt.net&#39;

url_1 &#61; input("请输入需要下载的小说目录地址,仅限顶点小说网[www.booktxt.net]&#xff1a;")

print(&#39;正在抓取目录章节...&#39;)

# url_1&#61;&#39;http://www.booktxt.net/1_1137/&#39;

for i in range(0, 10):

try:

html_data &#61; urllib.request.urlopen(url_1).read().decode(&#39;gbk&#39;)

txt_name &#61; re.compile(txt_name_partern).findall(html_data)

print(&#39;小说名称&#xff1a;&#39; &#43; txt_name[0])

atalog &#61; re.compile(catalog_partern).findall(html_data)

print(&#39;章节目录抓取完毕...总章节数&#xff1a;&#39; &#43; str(len(atalog)))

break

except:

if i &#61;&#61; 9:

print("请求失败次数过多&#xff0c;请重新下载")

print("请求失败&#xff0c;正在重试...")

time.sleep(0.5)

continue

files &#61; txt_name[0]

if not os.path.exists(files):

os.mkdir(files)

else:

file_path_list &#61; os.listdir(files)

for file in file_path_list:

os.remove(files &#43; &#39;\\&#39; &#43; file)

# print(atalog)

max_len &#61; len(atalog)

atalog.sort(key&#61;len)

# max_len &#61;19

for x in range(0, max_thread):

t &#61; threading.Thread(target&#61;down_mul, args&#61;(url_1, x &#43; 1, files))

print(&#39;线程[&#39; &#43; str(x &#43; 1) &#43; &#39;]Runing Star&#39;)

t.start()

while (1):

if thread_stop &#61;&#61; max_thread:

break

print("正在抓取...请稍后...剩余线程数:" &#43; str(max_thread - thread_stop))

time.sleep(5)

print("等待合并章节...")

filenames &#61; os.listdir(files)

filenames.sort(key&#61;len)

print(filenames)

fo &#61; open(txt_name[0] &#43; &#39;.txt&#39;, "w")

for file in filenames:

filepath &#61; files &#43; &#39;\\&#39; &#43; file

for line in open(filepath):

fo.write(line)

fo.close()

print("合并章节完成...等待删除工作目录...")

shutil.rmtree(files)

times &#61; time.clock() - start_time

h &#61; int(times) // 3600

m &#61; int(times) % 3600 // 60

s &#61; int(times) % 60

print("小说下载完成&#xff0c;总共消耗时间&#xff1a;", h, "小时", m, &#39;分钟&#39;, s, &#39;秒&#39;)

s &#61; input()

if __name__ &#61;&#61; &#39;__main__&#39;:

opener &#61; urllib.request.build_opener()

header_list &#61; []

for key, value in headers.items():

header_list.append((key, value))

opener.addheaders &#61; header_list

urllib.request.install_opener(opener)

main()



推荐阅读
  • Python爬取豆瓣数据实现过程解析
    这篇文章主要介绍了Python爬取豆瓣数据实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值, ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 文章目录简介HTTP请求过程HTTP状态码含义HTTP头部信息Cookie状态管理HTTP请求方式简介HTTP协议(超文本传输协议)是用于从WWW服务 ... [详细]
  • 目录爬虫06scrapy框架1.scrapy概述安装2.基本使用3.全栈数据的爬取4.五大核心组件对象5.适当提升scrapy爬取数据的效率6.请求传参爬虫06scrapy框架1. ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 最近在学Python,看了不少资料、视频,对爬虫比较感兴趣,爬过了网页文字、图片、视频。文字就不说了直接从网页上去根据标签分离出来就好了。图片和视频则需要在获取到相应的链接之后取做下载。以下是图片和视 ... [详细]
  • Scrapy 爬取图片
    1.创建Scrapy项目scrapystartprojectCrawlMeiziTuscrapygenspiderMeiziTuSpiderhttps:movie.douban.c ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
灸灵侯嗒黍_147
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有