推荐一款网站内链爬取python脚本

news2024/12/23 22:08:20

目标

使用 web-tools 提供的webSpider来爬取网站内链,并且将其导出。

webSpider介绍:

官网链接:https://web-tools.cn/web-spider
仓库地址:https://github.com/duerhong/web-spider

Web Spider 专门用于爬取网站内链,可以导出成csv/json/xml等文件。可以用于给网站生成专用的sitemap。

整个爬取过程是通过多个线程同时进行爬取,速度快;爬取过程中,会将非法的内链排除,最终可以生成一个可用的内链列表。

使用webSpider爬取原因:

  • 爬取快;
  • 内链高可用,且可导出
  • 配置简单

运行环境

python3.8 +
redis 版本不限

文件结构

config.py                   配置文件,可配置redis,日志,导出数据文件路径
utils.py                    核心函数库
worker.py                   爬取主程序
task.py                     任务相关
demo_create_task.py         创建任务demo
demo_export.py              导出数据demo
env-example                 env配置文件demo,请复制一份名称env的文件
requirements.txt            依赖安装
data/csv                    当执行了导出csv文件后创建
data/sitemap                当执行了导出sitemap文件后创建

安装依赖扩展

pip install -r requirements.txt

配置

env文件配置

将当前env-example复制一份,新文件名称为env文件,并且做好以下配置

ROOT_PATH:./               当前项目根路径
REDIS_HOST=127.0.0.1        redis host
REDIS_PORT=6379             redis prot
REDIS_PASSWORD=             redis password
REDIS_DB=0                  redis db
config.py 配置文件

如果想改动默认配置,请修改相关配置项。如果为正式环境,建议将debug设置为False。

运行

运行worker.py

worker.py 为多线程 + 轮询监听运行,可以通过config.py 文件下配置spider_thread_list来调整线程数量。
当有爬取任务进入的时候,worker.py将进入爬取状态。

python worker.py
# linux
python3 worker.py
# linux 后台守护任务方式运行
nohup python3 worker.py &

创建任务

可参考 demo_create_task.py 来创建一个爬取任务,主要代码

from task import SpiderTask
task = SpiderTask()
ret = task.createTask(
    # 着陆页
    landing_page="http://localhost:7071",
    # 域名,多个域名可以用逗号隔开。当爬取链接的域名配置这个域名的时候,被认为是内链。
    # 该方案解决部分内链写的是不规范的绝对链接。
    domain="localhost",
    # 基础链接,用于生成最终爬取链接,比如当爬取的内链为 /test/1 那么最终链接为 https://www.test.com/test/1
    basic_page="http://localhost:7071/"
)
if ret:
    print("任务ID:", ret)

为了模拟真实环境,这里我将用自己本地站点域名来测试。
运行创建任务脚本:

python demo_create_task.py

创建任务

这时候可以看看woker.py 运行输出(如果是在后台,可以在log下查看相关日志)
注意:在config.py下配置了 debug 为True的情况下,日志是直接可以输出的。
worker.py 运行结果

导出结果

将创建任务输出的taskID记录下来:20230428085908_Gjw3

通过以下代码(可以参考demo_export.py)来导出为csv/sitemap数据

import json
from config import config
import utils

from task import SpiderTask
task = SpiderTask()

# List of task that has been crawled
taskList = task.getFinishTask()
print(json.dumps(taskList, indent=4))

# get inner link list
key = config['redis_urls_result_queue_prefix_key']
taskID = "20230428085908_Gjw3"
innerList = task.getInnerList(taskID)
print(json.dumps(innerList, indent=4))

urlList = []
for url in innerList:
    urlList.append(url['standard_url'])
# export sitemap.xml
utils.saveSitemap(urlList, taskID)

# export csv file
headers = innerList[0].keys()
utils.saveCsv(headers, innerList, taskID)

注意替换 TaskID 为你的真实taskid,导出结果在 data/sitemap 和data/csv下

导出结果

总结:

从整体来看,达到了我们预期的结果,整个过程配置非常简单;
如果站点是需要定时更新sitemap 用这个非常的赞;
如果涉及到统计内链,异常内链的排除也很方便。
代码整体逻辑清晰,注释也很明确,稍加改动,可以发挥更大的作用,比如爬取网页内容等。

好东西不多说,给源码仓库点个星,让更多开发者收益。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ srand()和rand()用法

参考C rand 与 srand 的用法 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随…

论文学习笔记:Transformer Attention Is All You Need

Transformer: Attention Is All You Need 2022 年年底,一个大语言模型 ChatGPT 横空出世,并且迅速点燃了普罗大众对 AI 的热情,短短两个月, ChatGPT 就成为了史上最快成为上亿月活的应用,并且持续受到关注&#xff0c…

【Vue2.0源码学习】变化侦测篇-Object的变化侦测

文章目录 1. 前言2. 使Object数据变得“可观测”3. 依赖收集3.1 什么是依赖收集3.2 何时收集依赖?何时通知依赖更新?3.3 把依赖收集到哪里 4. 依赖到底是谁5. 不足之处6. 总结 1. 前言 我们知道:数据驱动视图的关键点则在于我们如何知道数据发…

记录docker swarm的使用

在前面的几篇文章中我们依次学习了dockerfile、docker-compose的使用,接下来是docker有一个比较 重要的使用,docker swarm的使用,与dockerfile和docker-compose相比较而言,docker swarm是在 多个服务器或主机上创建容器集群服务准…

Leetcode——66. 加一

💯💯欢迎来到的热爱编程的小K的Leetcode的刷题专栏 文章目录 1、题目2、暴力模拟(自己的第一想法)3、官方题解 1、题目 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组…

CTF-PHP反序列化漏洞2-典型题目

作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…

【纯属娱乐】随机森林预测双色球

目录 一、数据标准化二、预测代码三、后续 一、数据标准化 首先,我们需要对原始数据进行处理,将其转换为可用于机器学习的格式。我们可以将开奖号码中的红球和蓝球分开,将其转换为独热编码,然后将其与期数一起作为特征输入到机器…

ETL工具 - Kettle 查询、连接、统计、脚本算子介绍

一、 Kettle 上篇文章对 Kettle 流程、应用算子进行了介绍,本篇对查询、连接、统计、脚本算子进行讲解,下面是上篇文章的地址: ETL工具 - Kettle 流程、应用算子介绍 二、查询算子 数据输入使用 MySQL 表输入,表结构如下&#x…

给httprunnermanager接口自动化测试平台换点颜色瞧瞧

文章目录 一、背景1.1、修改注册表单的提示颜色1.2、修改后台代码:注册错误提示,最后提交注册,密码校验;1.3、修改了注册,那登录呢,也不能放过二、总结 一、背景 虽然咱给HttpRunnerManger引入进来&#xf…

【云台】开源版本SimpleBGC的电机驱动与控制方式

前言 最近想学习一下云台,发现资料确实还不太好找,比较有参考价值的是俄版的开源版本的云台代码,后面就不开源了,开源版本的是比较原始的算法,差不多是玩具级别的,不过还是决定学习一下,了解一…

PyCaret:低代码自动化的机器学习工具

PyCaret简介 随着ChatGPT和AI画图的大火,机器学习作为实现人工智能的底层技术被大众越来越多的认知,基于机器学习的产品也越来越多。传统的机器学习实现方法需要较强的编程能力和数据科学基础,这使得想零基础尝试机器学习变得非常困难。 机器…

Ucore lab5

实验目的 了解第一个用户进程创建过程了解系统调用框架的实现机制了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理 实验内容 练习0:已有实验代码改进 ​本实验中完成了用户进程的创建,能够对用户进程进行基本管理,并为…

C语言入门篇——自定义数据篇

目录 1、结构体 1.2、匿名结构体 1.3、结构体的自引用 1.4、结构体的声明和初始化 1.5、结构体的内存对齐 1.6、修改默认对齐数 1.7、结构体传参 2、枚举 3、共用体(联合体) 1、结构体 设计程序时,最重要的步骤之一是选择表示数据的…

【微机原理】8088/8086微处理器

目录 一、8088/8086的功能结构 1.总线接口部件(BIU) 2.执行部件(EU) 二、8088/8086的寄存器结构(14个) 溢出标志的概念 溢出和进位的区别 8086CPU是Intel系列的16位微处理器,他有16根数据…

框架学习之KOCA框架简介

KOCA框架简介 什么是KOCA术语定义发展历史 KOCA的总体架构产品优势开放性敏捷性(一体化解决方案)融合性安全性接入网关- KOCA Gateway KOCA DevOps流水线 KOCA技术栈 金证开发者社区:http://koca.szkingdom.com/ 什么是KOCA KOCA是金证基于…

LC-1376. 通知所有员工所需的时间(DFS:自上而下、自下而上)

1376. 通知所有员工所需的时间 难度中等125 公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中,每个员工都有一个直属负责人,其中 manager[i] 是第…

JavaScript常用数组方法-汇总

快速检索 方法解析 1:concat(); 功能:合并数组,可以合并一个或多个数组,会返回合并数组之后的数据,不会改变原来的数组; var str1 [12,2,"hello"];var str2 ["world"]; console.lo…

简单毛概刷题网页制作 2.0(拖欠近一年版)

原因是大概一年之前学校的毛概期末刷题网站突然崩了,但是一直没有修复。当时眼看着复习时间逐渐被压缩,自己啥也做不了,遂自学前端完成毛概刷题网页一枚。 最早的毛概刷题网站仅仅是 1.0 版本(传送门),功能…

Excel技能之对齐,你可能都没想到

Excel表格,既然要做得漂漂亮亮,一定离不开对齐。拍照需要美颜,表格需要对齐。 内容全部挤到一边去。 有些靠左,有些靠右。 加上空格,感觉对齐。如果数据特别多,又逃不过加班的命运。 实在是混乱不堪。审美…

Linux常用命令——iostat命令

在线Linux命令查询工具 iostat 监视系统输入输出设备和CPU的使用情况 补充说明 iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就…