python爬虫 小说下载 异步

看别人用异步请求快的飞起, 忍不住手痒尝试了下, 但过程并不美好, 一不小心就是满屏的"红色警告"
不过成功的喜悦总是让人陶醉的, 这也是学习的魅力吧

先看下运行过程

  • 需要插入一个视频, 暂时不知道视频怎么上传
    好像没啥问题, 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值