Python武器库开发-武器库篇之链接提取器(六十)

Python武器库开发-武器库篇之链接提取器(六十)

链接提取器介绍

链接提取器(Link Extractor)是一种用于从网页中提取链接的工具。它可以从网页的源代码中识别出所有的链接,并将这些链接提取出来。链接提取器可以用于各种目的,例如抓取网页数据、建立网站地图、搜索引擎优化等。

链接提取器通常使用正则表达式或HTML解析器来识别和提取链接。正则表达式是一种强大的模式匹配工具,它可以根据特定的模式来匹配和提取字符串。HTML解析器可以解析网页的HTML代码,并从中提取出链接。

链接提取器可以提取各种类型的链接,包括文本链接、图片链接、音视频链接等。它可以提取出绝对链接(包含完整的URL)和相对链接(相对于当前网页的URL)。

使用链接提取器可以简化从网页中提取链接的过程,并提高提取链接的效率。它可以帮助我们快速获取所需的链接,并进行后续的处理和分析。

链接提取器代码实现

接下来我们就用python开发一段 链接提取器,代码内容如下:

#!/usr/bin/env pythonfrom functools import total_ordering
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import logging# 内链
internal_urls = set()
# 外链
external_urls = set()
total_urls_visited = 0def is_valid(url):# 检查url# 协议(scheme) 网络位置(netloc) 路径(path)查询参数(query)parsed = urlparse(url)loc = bool(parsed.netloc)sche = bool(parsed.scheme)return loc and schedef get_all_website_links(url):urls = set()# 提取域名,用来判断是外链还是内链domain_name = urlparse(url).netlocsoup = BeautifulSoup(requests.get(url).content, "lxml")# 获取所有的a标签for a_tag in soup.find_all("a"):href = a_tag.attrs.get("href")if not href or href == "":continuehref = urljoin(url, href)# 剔除get请求后面的参数parsed_href = urlparse(href)href = parsed_href.scheme + "://" + parsed_href.netloc + parsed_href.path  # 后面的get参数给过滤掉了if not is_valid(href) or href in internal_urls:continue# 判断是否为外链if domain_name not in href:print(f"外部链接:{href}")external_urls.add(href)continueprint(f"内部链接:{href}")urls.add(href)internal_urls.add(href)return urls# 递归
def crawl(url, max_url=15):global total_urls_visitedtotal_urls_visited += 1print(f"正在爬取:{url}")links = get_all_website_links(url)for link in links:if total_urls_visited > max_url:breakcrawl(link, max_url=max_url)if __name__ == "__main__":url = "https://www.baidu.com/"crawl(url=url, max_url=30)domain_name = urlparse(url).netlocprint("总内部连接数为:", len(internal_urls))print("总外部连接数为:", len(external_urls))with open(f"{domain_name}的内部链接.txt", "w") as f:for internal_url in internal_urls:print(internal_url.strip(), file=f)with open(f"{domain_name}的外部链接.txt", "w") as f:for external_url in external_urls:print(external_url.strip(), file=f)

代码逻辑分析

这段代码是一个简单的网页爬虫,用于爬取指定网页的内部链接和外部链接。

首先,在代码中导入了一些必要的模块,包括functoolsrequestsbs4urllib.parselogging

然后,定义了一些全局变量,包括内链集合internal_urls、外链集合external_urls和已访问的链接总数total_urls_visited

接下来,定义了一个is_valid函数,用于检查一个链接是否合法。函数中使用urlparse对链接进行解析,判断是否具有有效的网络位置(netloc)和协议(scheme)。

然后,定义了一个get_all_website_links函数,用于获取指定网页的所有链接。函数中使用urlparse获取域名,然后使用requests.get获取网页内容,再使用BeautifulSoup对网页进行解析。然后,遍历所有的<a>标签,提取href属性,并进行一系列处理,包括合并相对链接为绝对链接、剔除链接中的查询参数等。最后,判断链接是否合法,以及是内链还是外链,将链接分别添加到内链集合和外链集合中,并返回所有的链接。

接下来,定义了一个递归函数crawl,用于递归爬取链接。函数中先增加已访问的链接总数,并打印正在爬取的链接。然后,调用get_all_website_links函数获取链接,并遍历链接,递归调用crawl函数。当已访问的链接总数超过指定的最大链接数时,跳出循环。

最后,在main函数中,指定要爬取的初始链接和最大链接数,并调用crawl函数进行爬取。最后,输出总内部链接数和总外部链接数,并将内链集合和外链集合分别写入文件中。

运行效果图

如下是我们这串代码的实际运行效果图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maya 白膜渲染简单教程

零基础渲染小白&#xff0c;没关系&#xff0c;一篇超简单教程带你学会渲染白膜。 先打开Maya&#xff0c;看看面板有没有渲染器&#xff0c;这里以Arnold为主。 要是没有这个&#xff0c;就去找插件管理器&#xff0c; Arnold的是mtoa&#xff0c;在搜索栏搜&#xff0c;然后把…

打造精致UI界面:字体设计的妙招

字体设计是UI设计的关键模块之一。字体设计是否有效可能直接实现或破坏整个UI界面。那么&#xff0c;界面设计的字体设计有哪些规范呢&#xff1f;如何设计细节字体&#xff1f;本文将解释字体设计规范的可读性、可读性和可用性&#xff0c;并介绍UI界面中的字体设计技巧。 如…

02-ES6新语法

1. ES6 Proxy与Reflect 1.1 概述 Proxy 与 Reflect 是 ES6 为了操作对象引入的 API 。 Proxy 可以对目标对象的读取、函数调用等操作进行拦截&#xff0c;然后进行操作处理。它不直接操作对象&#xff0c;而是像代理模式&#xff0c;通过对象的代理对象进行操作&#xff0c;…

功能测试的内容与目的是什么?

在软件开发与测试过程中&#xff0c;功能测试是不可或缺的关键步骤&#xff0c;它主要关注软件产品是否能够按照设计规格和用户需求实现预定的功能。功能测试的内容与目的&#xff0c;简单来讲&#xff0c;就是验证软件的各种特性和功能是否正确、完整且符合预期&#xff0c;确…

docker 中 File Sharing 和Volumes 的区别

在 Docker 中&#xff0c;File Sharing 和 Volumes 都涉及到将文件和目录从主机系统映射到容器中&#xff0c;但它们的用途和实现方式有一些重要的区别&#xff1a; 一、简介 File Sharing 是 Docker Desktop 在 Windows 和 macOS 上的一项功能&#xff0c;允许你将主机文件系…

API-操作元素内容

学习目标&#xff1a; 掌握操作元素内容 学习内容&#xff1a; 操作元素内容元素innerText属性元素innerHTML属性案例 操作元素内容&#xff1a; DOM对象都是根据标签生成的&#xff0c;所以操作标签&#xff0c;本质上就是操作DOM对象。就是操作对象使用的点语法。如果想要修…

开源的数字孪生平台

欧洲对工业4.0的追求体现在三个方面&#xff1a; 数字孪生、智能制造和万物互联。 资助2440万欧元的开源数字孪生平台 源代码&#xff1a; http://www.gitpp.com/ccdan/dpqq-digital-twins 这套数字孪生是工业4.0整体规划中的中的一项技术&#xff0c;实现了一种称为“数字…

正则表达式常用表示

视频教程&#xff1a;10分钟快速掌握正则表达式 正则表达式在线测试工具&#xff08;亲测好用&#xff09;&#xff1a;测试工具 正则表达式常用表示 限定符 a*&#xff1a;a出现0次或多次a&#xff1a;a出现1次或多次a?&#xff1a;a出现0次或1次a{6}&#xff1a;a出现6次a…

UE4_材质_雨滴涟漪效果ripple effect_ben教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿生活越来越好&#xff01; 雨水落下时会产生这些非常漂亮的同心环波纹&#xff0c;我们要做的第一件事是创建一个单个的圆环遮罩动画&#xff0c;我们希望环在开始的时候在中心很小&#xff0c;然后放大&…

论文发表CN期刊《高考》是什么级别的刊物?

论文发表CN期刊《高考》是什么级别的刊物&#xff1f; 《高考》是由吉林省长春出版社主管并主办的省级教育类期刊&#xff0c;期刊以科教兴国战略为服务宗旨&#xff0c;专门反映和探索国内外教育教学和科研实践的最新成果。该期刊致力于为广大教育工作者提供一个高质量的学术…

Docker部署常见应用之SFTP服务器

文章目录 简介Dockers部署单用户多用户用户信息加密使用SSH密钥认证 参考文章 简介 atmoz/sftp 是一个基于 Docker 的 SFTP 服务镜像&#xff0c;它使用 OpenSSH 来提供 SFTP 服务。这个镜像支持创建单个或多个用户的 SFTP 访问&#xff0c;并允许用户通过 SFTP 协议安全地共享…

CAN总线仲裁(四)

​ 多设备同时发送遇到的问题 CAN总线只有一对差分信号线&#xff0c;同一时间只能有一个设备操作总线发送数据&#xff0c;若多个设备同时有发送需求&#xff0c;该如何分配总线资源&#xff1f; 解决问题的思路&#xff1a;制定资源分配规则&#xff0c;依次满足多个设备的…

空气质量预报模式系统WRF-CMAQ

空气污染问题日益受到各级政府以及社会公众的高度重视&#xff0c;从实时的数据监测公布到空气质量数值预报及预报产品的发布&#xff0c;我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

【vue大作业-端午节主题网站】【预览展示视频和详细文档】

vue大作业-端午节主题网站介绍 端午节&#xff0c;又称为龙舟节&#xff0c;是中国的传统节日之一&#xff0c;每年农历五月初五庆祝。这个节日不仅是纪念古代爱国诗人屈原的日子&#xff0c;也是家人团聚、共享美食的时刻。今天&#xff0c;我们非常高兴地分享一个以端午节为…

高压防触碰预警装置,工期重要还是命重要?

“说了多少遍了&#xff0c;不要在高压线下赶工期”吊车违规施工碰撞到高压线&#xff0c;导致供电线路跳闸停电事故&#xff0c;现场火花四溅及其危险&#xff0c; 高压线路被外力破坏的情况&#xff0c;违规施工、赶工期、视觉盲区导致线路外破等情况&#xff0c;想必大家也…

基于STM32的简易智能家居设计(嘉立创支持)

一、项目功能概述 1、OLED显示温湿度、空气质量&#xff0c;并可以设置报警阈值 2、设置4个继电器开关&#xff0c;分别控制灯、空调、开关、风扇 3、设计一个离线语音识别系统&#xff0c;可以语音控制打开指定开关、并且可以显示识别命令词到OLED屏上 4、OLED实时显示&#…

基于B/S版java语言+SpringBoot技术开发的云HIS系统源码 HIS系统住院业务模块常见问题及解决方案

基于B/S版java语言SpringBoot技术开发的云HIS系统源码 HIS系统住院业务模块常见问题及解决方案 随着医疗技术的不断提高&#xff0c;住院治疗已成为许多病人的常规选择。但是&#xff0c;住院治疗不仅需要医护人员的精心照顾&#xff0c;也需要个高效的信息系统来保证整个治疗过…

flac格式如何转mp3?7大热门实用音频转换软件大PK

FLAC是Free Lossless Audio Codec&#xff08;免费无损音频编解码器&#xff09;的缩写&#xff0c;是一种在压缩文件大小的同时保留原始音乐质量的音频格式。不过&#xff0c;大多数音频格式都会在音乐质量和文件大小之间做出权衡。当你使用flac获得更好的音乐质量时&#xff…

C++ 63 之 函数模版和普通函数的区别

#include <iostream> #include <string> using namespace std;template<typename T> T myAdd(T a, T b){return a b; }int myAdd2(int a, int b){return a b; }int main() {int a 1;int b 2;char c a; // a的ask码 97// cout << myAdd(a,c) <…

BarTender软件最新版下载-bartender条码标签打印软件下载

​​BarTender​​是一款遵循“look and feel”标准的​​条码打印​​软件。​​BarTender​​条码打印软件能够帮助用户挥洒自如&#xff0c;轻松制作出标签条码&#xff0c;包括文本、图形、​​条形码​​和大多数序列化功能。BarTender条码打印软件功能强大、操作简单&…