看别人用异步请求快的飞起, 忍不住手痒尝试了下, 但过程并不美好, 一不小心就是满屏的"红色警告"
不过成功的喜悦总是让人陶醉的, 这也是学习的魅力吧
先看下运行过程
- 需要插入一个视频, 暂时不知道视频怎么上传
好像没啥问题, 1秒十章的下载速度, 挺感人了. 异步运行任务每次只添加20个, 最终耗时相比同步运行快了10多倍
再看下运行结果,
有些章节标题漏掉了, 前几章内容变成了最新章节的内容, 应该是正则匹配出了的偏差, 继续往下看
第一章怎么跑到这么靠后的地方了, 原因不明, 继续往下看
第二章是空的,
继续往下检查了一些章节, 好像没啥问题了. 总体上就是第一章前面多了一些章节, 部分章节为空, 其余部分正常. 应该是前面这几个玩意对应的html结构不同导致的
所有章节内容都保存在“小说名.txt”中了, 进行适当的修改, 处理结果保存在"modify.txt"中
快速浏览了整个文件, 章节内容没啥问题, 顺序也对的上
上代码:
# -*- coding:utf8 -*-
# 从https://www.xbiquge.cc/网站下载小说
# https://www.xbiquge.cc/book/9860/
# https://www.xbiquge.cc/book/9860/7063460.html
# catalog目录,chapter章节
# r'[\u4e00-\u9fa5]+' 1到任意多个汉字
# r'\d{1,10}' 章节链接编号,章节链接在类名为box_con的第2个div中
# r'[\u4e00-\u9fa5]+\d{1,4}[\u4e00-\u9fa5]+ [\u4e00-\u9fa5]+' 小说章节名
import requests
import asyncio
import aiohttp
import json
import re
import time
import os
import sys
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Cm
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'}
url = input('please input url:')
if len(url) < 24:
# url = 'https://www.xbiquge.cc/book/9860/'#为了测试方便,设置默认地址
url = 'https://www.xbiquge.cc/book/14779/'
rootPath = r'C:\Users\QQ\Desktop\ls\py\{}'
url = url.replace(' ','')
# name = '我的微信连三界 狼烟新书'#name和saveCatalog()必须要注释掉一个
# name = '一世兵王 我本疯狂新书'
def getCatalog():
def saveCatalog():
rep = requests.get(url, headers=headers)
print(rep.text[:10])
rep.encoding = 'gbk'
soup = BeautifulSoup(rep.text, 'lxml') # 解析
title = soup.title.contents[0]
print(title)
global name
name = (re.findall('(.+?) ', title))[0] + ' ' + (re.findall('_(.+?)_', title))[0] # 小说名
print(name)
mkDir(path=rootPath.format(name)) # 为之后将要保存的文件创建文件夹
f1 = r'C:\Users\QQ\Desktop\ls\py\{}\{}.txt'.format(name, '目录')
with open(f1, 'w') as f:
f.write(rep.text)
saveCatalog() # 只需要运行一次
def findAllChapter():
f1 = r'C:\Users\QQ\Desktop\ls\py\{}\{}.txt'.format(name, '目录')
f2 = r'C:\Users\QQ\Desktop\ls\py\{}\{}.txt'.format(name, '章节链接')
with open(f1, 'r') as f:
rep = f.read()
soup = BeautifulSoup(rep, 'lxml')
s = str(soup.find(id='list'))
soup = BeautifulSoup(s, 'lxml')
ss = soup.findAll('a')[:]
print(ss