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

前言

由于是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 == 9:

print("请求失败次数过多,请重新下载")

print("请求失败,正在重试...")

time.sleep(0.5)

continue

def down_mul(url, cnt, file_path):

global flag, max_len, atalog, txt_max, thread_stop

down_flag = 1

while flag * txt_max < max_len - 1:

flag += 1

star = flag * txt_max

end = star + txt_max

if star >= end:

break

if end > max_len:

end = max_len

print("正在抓取章节" + str(star) + '-' + str(end) + '...')

down_flag = 0

for i in range(star, end):

if i >= max_len:

break

for j in range(0, 10):

try:

down_txt(url + atalog[i][0] + ".html", atalog[i][1], file_path + '\\' + str(star + 1) + '.txt')

break

except:

if i == 9:

print("请求失败次数过多,请重新下载")

print("请求失败,正在重试...")

time.sleep(0.5)

continue

thread_stop += 1

if down_flag:

print("线程[" + str(cnt) + "]未获取到任务...")

else:

print("线程[" + str(cnt) + "]运行完毕...")

def main():

global atalog, max_len, thread_stop, max_thread, start_time

basic_url = 'www.booktxt.net'

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

print('正在抓取目录章节...')

# url_1='http://www.booktxt.net/1_1137/'

for i in range(0, 10):

try:

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

txt_name = re.compile(txt_name_partern).findall(html_data)

print('小说名称:' + txt_name[0])

atalog = re.compile(catalog_partern).findall(html_data)

print('章节目录抓取完毕...总章节数:' + str(len(atalog)))

break

except:

if i == 9:

print("请求失败次数过多,请重新下载")

print("请求失败,正在重试...")

time.sleep(0.5)

continue

files = txt_name[0]

if not os.path.exists(files):

os.mkdir(files)

else:

file_path_list = os.listdir(files)

for file in file_path_list:

os.remove(files + '\\' + file)

# print(atalog)

max_len = len(atalog)

atalog.sort(key=len)

# max_len =19

for x in range(0, max_thread):

t = threading.Thread(target=down_mul, args=(url_1, x + 1, files))

print('线程[' + str(x + 1) + ']Runing Star')

t.start()

while (1):

if thread_stop == max_thread:

break

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

time.sleep(5)

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

filenames = os.listdir(files)

filenames.sort(key=len)

print(filenames)

fo = open(txt_name[0] + '.txt', "w")

for file in filenames:

filepath = files + '\\' + file

for line in open(filepath):

fo.write(line)

fo.close()

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

shutil.rmtree(files)

times = time.clock() - start_time

h = int(times) // 3600

m = int(times) % 3600 // 60

s = int(times) % 60

print("小说下载完成,总共消耗时间:", h, "小时", m, '分钟', s, '秒')

s = input()

if __name__ == '__main__':

opener = urllib.request.build_opener()

header_list = []

for key, value in headers.items():

header_list.append((key, value))

opener.addheaders = header_list

urllib.request.install_opener(opener)

main()

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

  1. python爬取小说写入txt_用python爬整本小说写入txt文件

    没太完善,但是可以爬下整本小说.日后会写入数据库,注释不要太在意,都是调试的.入库估计这周之后,这次爬的是笔趣阁的第1150本书,大家只要可以改get_txt()里数字就行,查到自己要看哪本书一改就可 ...

  2. 基于python爬虫技术的应用_基于Python爬虫技术的应用

    办公自动化杂志 一.引言 本文主要是对 Python 爬虫技术进行阐述,基于 python 的爬虫与其他语言相比的有很多优势.通过爬去某个网站的所有新闻这个案例,来进一步阐释 Python 爬虫技术的 ...

  3. Python之PIL之绘图:基于Python的PIL库绘制各种图形、添加文字等

    Python之PIL之绘图:基于Python的PIL库绘制各种图形.添加文字等 目录 一.绘制各种形状各种案例 1.绘制矩形 2.绘制圆形.弧线形

  4. 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计

    <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...

  5. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)

    目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...

  6. python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...

    python是一门优秀的计算机编程语言,两年前曾因为动过自动化交易的念头而关注过它.前几天在微信上点了个python教学的广告,听了两堂课,所以现在又热心了起来,照葫芦画瓢写了一段简单的网络爬虫代码, ...

  7. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  8. python 写入excel_基于Python实现Excel的读写

    LabVIEW:2018 Python:3.6.0 xlrd:1.2.0 xlwt:1.3.0 Python的强大不需要我来解释,人生苦短,我用python!自行学习之后总想把它在工作中慢慢用起来,L ...

  9. python 文件格式转换_数据分析:基于Python的自定义文件格式转换系统

    ( 白宁超 2018年7月16日14:47:41 ) 导读:随着大数据的快速发展,自然语言处理.数据挖掘.机器学习技术应用愈加广泛.针对大数据的预处理工作是一项庞杂.棘手的工作.首先数据采集和存储,尤 ...

  10. python selenium爬虫_详解基于python +Selenium的爬虫

    详解基于python +Selenium的爬虫 一.背景 1. Selenium Selenium 是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,支持chrome.firefox等主 ...

最新文章

  1. firefox+linux+nginx搭建server与client通过证书双向认证环境
  2. Python3.2 --- Print函数用法
  3. 顺时针或逆时针旋转180度等于先作一个水平镜像,再作一个垂直镜像
  4. 腾讯与中国人民大学开源最新研究成果:3TS腾讯事务处理技术验证系统
  5. 部署环境_Hyperledger Fabric Composer环境部署(一)
  6. React开发(216):ant dedign 弹窗销毁后再打开,原来的值仍存在,如何销毁弹窗内容?
  7. ORB-SLAM2和ORB-SLAM的区别
  8. 某Q娱乐网emlog程序整站源码
  9. Kubernetes学习指南,轻松拥抱云原生
  10. COPRA RF 2005 SR1最新版 (冷弯成型,轧辊设计)
  11. linux打开dwg文件怎么打开方式,dwg文件扩展名,dwg文件怎么打开?
  12. python颜色名称_中文颜色名称与RGB颜色对照表
  13. 17.1.1 颜色和 RGBA 值
  14. 为什么我不断收到Java错误:错误:可以找到或加载类Dint?
  15. Zynq7000(XC7Z045FF900)硬件开发完整指南
  16. 【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化
  17. 在vue中将数据导出为excel文件file-saver+xlsx+script-loader
  18. 图片抖动的效果(修改后)
  19. 聊天群怎么引流?微信群精准引流的方法
  20. 鸿蒙系统照样没有谷歌服务,曝华为Mate40 Pro+升级鸿蒙2.0系统 谷歌服务照样能用...

热门文章

  1. Ubuntu 16.04 (Ubuntu18.04 也可以用)远程桌面(使用win10远程桌面客户端链接)和 使用vncveiwer链接的配置
  2. ptb同一屏呈现两张图片matlab,PTB-3 安装手册
  3. 如何用计算机蓝牙发送文件,电脑怎么利用蓝牙使手机和电脑互传文件
  4. 【写给初发论文的人】撰写综述性科技论文常见问题
  5. 听打测试打字速度软件,易捷听打练习测速助手
  6. v.douyin.com/xxx抖音网址官方生成制作抖音缩短口令网址php接口方法
  7. 性能魔方七剑下天山之莫问剑:全球首创智能评测
  8. 正睿OIday8-day10
  9. 工具类之十七 基于zxing的二维码生成工具类
  10. 最小的操作系统MenuetOS