toolkit-frame之toolkit-sprider(数据采集)---笔趣阁小说

简介: toolkit-frame之toolkit-sprider(数据采集)---笔趣阁小说

采集笔趣阁小说,使用以下几个核心包:

requests:2.10.0

beautifulsoup4:4.7.1

其中:

1、BaseFrame.__log__("开始采集中国船舶网的数据...") BaseFrame.__log__() 就是我个人封装的日之类替换成print就可以。

2、response = requests.get(self.base_url, timeout=30, headers=UserAgent().get_random_header(self.base_url)) 这个就是封装的一个随机header,防止被认为是机器,每次都模拟一个新的浏览器的header。代码是这个:UserAgent().get_random_header(self.base_url) 随机header类:

3、filepath = BaseConfig().CORPUS_ROOT + os.sep + "equipment_info.xlsx" 这个就是文件的路径BaseConfig().CORPUS_ROOT替换成自己的文件路径就可以了。

4、mmEntity = SpriderEntity() 这个就是一个实体类用来记录采集过的数据,程序可以多次执行。防止数据重复采集的策略。

不废话了直接上代码:

import os
import requests
from bs4 import BeautifulSoup
from access.sprider.SpriderAccess import SpriderAccess
from base.BaseConfig import BaseConfig
from base.BaseFrame import BaseFrame
from business.sprider.UserAgent import UserAgent
from object.entity.SpriderEntity import SpriderEntity
from plugin.Tools import Tools
class QuLa:
    base_url = "https://www.qu.la/"
    save_path = BaseConfig().CORPUS_ROOT + os.sep + "QuLa"
    def __init__(self):
        Tools.judge_diskpath_exits_create(self.save_path)
        pass
    def sprider_story(self):
        BaseFrame.__log__("开始采集笔趣阁排行榜小说...")
        self.story_url = self.base_url + "paihangbang"
        try:
            response = requests.get(self.story_url, timeout=30, headers=UserAgent().get_random_header(self.story_url))
            response.encoding = 'UTF-8'
            soup = BeautifulSoup(response.text, "html5lib")
        except Exception as e:
            BaseFrame.__err__("采集出现错误" + str(e))
            pass
        div_list = soup.findAll('div', attrs={"class": 'topbooks'})
        for div in div_list:
            a_list = div.find_all('a', attrs={"target": '_blank'})
            for a in a_list:
                content_url = self.base_url + a.get("href")
                txt_title = a.get("title")
                try:
                    response = requests.get(content_url, timeout=30, headers=UserAgent().get_random_header(content_url))
                    response.encoding = 'UTF-8'
                    soup = BeautifulSoup(response.text, "html5lib")
                    dl_tag = soup.find('dl')
                    a_list = dl_tag.find_all('a')
                    for a_tag in a_list:
                        href = a_tag.get("href")
                        if "book" in href:
                            url = self.base_url + href
                            chapter = a_tag.text
                            mmEntity = SpriderEntity()
                            mmEntity.sprider_base_url = self.base_url
                            mmEntity.create_datetime = Tools.get_current_datetime()
                            mmEntity.sprider_url = url
                            mmEntity.sprider_pic_title = chapter
                            mmEntity.sprider_pic_index = str(1)
                            if SpriderAccess().query_sprider_entity_by_urlandtitle(url, chapter) is None:
                                SpriderAccess().save_sprider(mmEntity)
                                self.get_content(url, chapter, txt_title)
                except Exception as e:
                    BaseFrame.__err__("采集" + content_url + "出现错误" + str(e))
                    pass
            pass
    def get_content(self, url, chapter, title):
        """
        写文件至文本中
        :param url:采集的URL
        :param chapter: 章节名称
        :param title: 小说名称
        :return:
        """
        try:
            BaseFrame.__log__("正在采集" + url + "上的小说...")
            response = requests.get(url, timeout=60, headers=UserAgent().get_random_header(url))
            response.encoding = 'UTF-8'
            soup = BeautifulSoup(response.text, "html5lib")
            content = soup.find('div', attrs={"id": 'content'})
            content = chapter + "\n" + str(content). \
                replace('<br/>', '\n'). \
                replace("<script>chaptererror();</script>", ""). \
                replace("<div id=\"content\">", ""). \
                replace("</div>", "")
            txt_path = self.save_path + os.sep + str(title) + ".txt"
            Tools.write_string_to_txt(txt_path, content)
        except Exception as e:
            BaseFrame.__err__("采集" + chapter + "出现错误" + str(e) + "尝试重新采集.")
            self.get_content(url, chapter, title)
            pass
if __name__ == '__main__':
    QuLa().sprider_story()
pass
目录
相关文章
|
算法 Python
LightGBM高级教程:自动调参与超参数优化
LightGBM高级教程:自动调参与超参数优化【2月更文挑战第5天】
2221 2
|
网络协议 Java Maven
基于Netty实现TCP通信
基于Netty实现TCP通信
352 0
|
运维 监控 安全
云计算MSP行业调研报告
# 1. 概述 ## 1.1 背景和概念 企业上云是当前的大势所趋,但企业上云并非坦途。随着业务、数据等向云端迁移,企业在上云过程中会各种复杂的问题,比如平台选择、系统迁移、多云管理、应用优化以及成本核算和安全管理等问题。要解决这些问题,就需要专业的团队来指导,因此诞生了云MSP。 云MSP即云管理服务提供商(Cloud Management Service Provider),通常是指对接
5338 0
云计算MSP行业调研报告
|
安全 数据库连接 数据库
Navicat16最新版破解激活教程,亲测可用
本篇文章教大家如何破解 Navicat,Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
11996 0
|
8月前
|
Web App开发 移动开发 前端开发
H5页面适配大屏和小屏的方案
H5页面适配大屏和小屏的方案
661 62
|
2月前
|
JavaScript Linux API
阿里云轻量服务器与本地环境部署OpenClaw及Skills集成零基础完整教程
本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skills集成、阿里云百炼API及免费大模型接入方法,并对部署与使用过程中常见问题提供统一解答,所有操作均可直接复现。
651 3
|
5月前
|
数据采集 缓存 人工智能
微信 item_search - 关键词取文章列表接口对接全攻略:从入门到精通
本攻略详解基于搜狗微信搜索合规接口的item_search调用方法,涵盖接口认知、密钥获取、参数配置、签名生成、批量采集、异常处理及性能优化,结合Python实操示例,助力开发者高效实现微信文章列表的数据获取与舆情监测、内容聚合等应用,兼顾合规性与生产稳定性。
|
存储 Windows
SD 卡格式化还可以恢复数据吗?4个方法帮你恢复SD卡数据
SD卡作为存储设备,被广泛应用于手机、相机和其他数码设备中。有时我们可能会不小心格式化SD卡,或者系统提示需要格式化,导致重要数据似乎“一瞬间消失”。但别急,实际上,大多数情况下数据是可以恢复的。接下来,我们将用简单易懂的语言,带你了解格式化后数据是否还在,以及如何一步步找回那些丢失的文件。
|
11月前
|
存储 机器学习/深度学习 人工智能
告别OOM!这款开源神器,如何为你精准预测AI模型显存?
在 AI 开发中,CUDA 显存不足常导致训练失败与资源浪费。Cloud Studio 推荐一款开源工具——AI 显存计算器,可精准预估模型训练与推理所需的显存,支持主流模型结构与优化器,助力开发者高效利用 GPU 资源。项目地址:github.com/st-lzh/vram-wuhrai