多线程下载小说

本文介绍了如何利用Python的多线程技术配合Redis进行小说的快速下载。通过实测,一万章左右的小说能在四分钟内完成爬取。文章详细讲解了多线程的使用场景,Redis在任务分发和数据暂存的角色,以及代理的考虑因素。虽然也尝试过使用MongoDB,但最终简化为只使用Redis。
摘要由CSDN通过智能技术生成

引言

不知道说啥子, 直接进入正题,哦,本人实测,一本一万多章的小说大概四分钟能爬完,在此想说(小说)网站牛逼,不像学校的教务系统,说多了都是泪

多线程

爬取属于io密集型的,所以引入多线程

redis

用redis分发任务以及数据暂存,所以想用的得去下个redis,嘻嘻嘻,其实之前还用了mongodb,为了减少麻烦,就缩减为redis了
redis windows安装 需要开着redis-server,到了启动redis-server那步即可停止

代理

质量不错就用,免费的去一边(自己试了些免费,不咋行)

代码

'''

安装redis  开启server
采用redis 数据太多好像一次取不出来 试了一个一万多章的,一次只取出了9000多章, 现在分批次取
所以大概需要的值有两个
1. 所需要爬取小说的目录页面的链接
2. 第一章的开头位置, 因为有些可能前六章是最新章节 默认:0
3.有问题再联系,小说网站总体差不多(网页排版)应该能适用几个网站吧吧吧吧

'''

import random
import redis
# import pymongo
import requests
import json
import logging
import threading

from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor

# from Proxyer import Proxyer

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s")


class BookDownload:
    def __init__(self, chapter_link, start_place=0, abbr='http://', proxy=None):
        self.chapter_link = chapter_link  # 目录页面的链接
        self.start_place = start_place  # 第一章在目录中的位置
        self.abbr_link = chapter_link  # 前缀 链接的前一部分 做了处理 不需要再传了
        self.redis_client = redis.Redis()
        self.event = threading.Event()
        self.redis_list = 'url_info'
        self.redis_failed_list = 'failed_url'
        self.redis_cache = 'download'
        self._proxy = proxy
        # self.mongo_collect = pymongo.MongoClient().chapter_3.test3  # mongodb,自己设置
        self.all_chapter = 0
        self.successed_download = 0
        self.session = requests.session()
        self.header = {
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值