Powershell 简易爬虫,提取种子网站的磁力链接

目录

  • 一. 需求
  • 二. 分析
    • 2.1 思路分析
    • 2.2 技术点
  • 三. 代码
  • 四. 效果


一. 需求

⏹有网站如下所示,先要求从按照关键词搜索到的网页中,提取出所有的磁力链接。

在这里插入图片描述


二. 分析

2.1 思路分析

  • 打开网页之后,从网页中先提取出所有的标题相关的url
  • 然后再打开所有提取到的url
  • 再从每一个新打开的页面中获取磁力链接所在a标签的href属性值

2.2 技术点

  • Invoke-WebRequest:发送网络请求
  • workflow
    • workflow 是一种特殊的语法结构,用于创建并发执行的工作流。工作流允许你定义一系列步骤,这些步骤可以同时执行或并行执行,适用于需要处理大量数据或需要在多个计算资源上执行任务的情况。
    • 在 foreach -parallel 循环内并行执行多个任务,从而加快处理速度。
    • InlineScript { ... }:内联脚本块用于在工作流中执行本地 PowerShell 脚本或命令。
  • Add-Type -Path ".\xxx.dll":用于引入第三方dll
  • New-Object HtmlAgilityPack.HtmlDocument:用于创建引入的库中的对象
    • HtmlAgilityPack:用于解析html文本的第三方库
    • 官网:https://github.com/zzzprojects/html-agility-pack/releases/tag/v1.11.61
    • 下载源码后,手动编译 HtmlAgilityPack.Net40,得到 HtmlAgilityPack.dll
  • .DocumentNode.SelectSingleNode:用于配合XPATH语法解析html文本
  • [System.Uri]::EscapeDataString($搜索关键词)
    • 搜索的关键字是中文,实际发送请求时,需要把中文转换

三. 代码

param(# 参数必须输入[Parameter(Mandatory)]# 当未添加 -name 参数时,脚本会报错[string]$搜索关键词
)# 域名
$domain = 'http://www.kisssub.org'
# 搜索关键字,通过 [System.Uri]::EscapeDataString 对汉字进行编码
$enCoded_search_keyword = [System.Uri]::EscapeDataString($搜索关键词)
# 请求地址
$request_url = "$($domain)/search.php?keyword=$($enCoded_search_keyword)"# session
$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
$session.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
$session.Cookies.Add((New-Object System.Net.Cookie("user_script_url", "%2F%2F1.acgscript.com%2Fscript%2Fmiobt%2F4.js%3F3", "/", "www.kisssub.org")))
$session.Cookies.Add((New-Object System.Net.Cookie("user_script_rev", "20181120.2", "/", "www.kisssub.org")))# 请求头
$request_header = @{"Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9""Accept-Encoding"="gzip, deflate""Accept-Language"="zh-CN,zh;q=0.9,ja;q=0.8,en;q=0.7,zh-TW;q=0.6""Cache-Control"="no-cache""Pragma"="no-cache""Upgrade-Insecure-Requests"="1"
}# 获取磁力链接所在页面的URL
function Get_WEB_URL {param ([string]$url, [Microsoft.PowerShell.Commands.WebRequestSession]$session, [PSCustomObject]$header)# 发送网络请求$response = Invoke-WebRequest -UseBasicParsing `-Uri $url `-WebSession $session `-Headers $header# 若响应code不是200,则证明网络连接失败if ($response.StatusCode -ne 200) {Write-Host "网络请求失败..."return }# 提取磁力链接所在页面的url$target_web_urls = $response.Links.outerHTML | ForEach-Object {# 若不是对应页面的url,则跳过if (-not ($_ -match ".*show.*.html")) {return}# 提取出目标页面的url$_.split(" ")[1].replace("href=`"", "$($domain)/").replace("`"", "")}return $target_web_urls
}# 指定url,session,header 发送网络请求
$target_web_urls = Get_WEB_URL -url $request_url -session $session -header $request_header
$target_web_urls | Out-Host<#⏹创建一个workflow,用于并发处理多任务
#>
workflow Get-WebContent {param ([string[]] $urls)<#⏹foreach -parallel 是 Workflow 中用来并行处理迭代集合的语法每个 $url 都会并行处理,即同时发送多个请求以提高效率#>foreach -parallel ($url in $urls) {# 睡眠1秒# Start-Sleep -Seconds 1# ⏹InlineScript 块允许在 Workflow 中执行本地的 PowerShell 脚本或命令$web_response = InlineScript {# 发送网络请求$webRequest = Invoke-WebRequest -UseBasicParsing -Uri $using:url -Headers $my_header# 获取页面上的所有url连接$webRequest.Links.outerHTML}# PSCustomObject 是自定义对象的数据类型[PSCustomObject]@{Content = $web_response}}
}Write-Host "⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓提取到的磁力链接如下⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓" -ForegroundColor Red# 引入 HtmlAgilityPack.dll 依赖库
Add-Type -Path ".\HtmlAgilityPack.dll"
# 创建 HtmlDocument对象 用于解析html文本
$htmlDoc = New-Object HtmlAgilityPack.HtmlDocument# 调用workflow,获取响应
$results = Get-WebContent -urls $target_web_urls
$results.Content | ForEach-Object {# 如果不是磁力链接的url,就跳过if (-not ($_ -match ".*ref=`"magnet.*")) {return}# 将含有磁力链接的html文本放到 HtmlDocument对象 中$htmlDoc.LoadHtml($_)<#⏹通过xpath语法提取到a标签对象SelectSingleNode只能提取单节点SelectNodes可以提取多个节点#>$aEelement = $htmlDoc.DocumentNode.SelectSingleNode("//a[@id='magnet']")<#⏹根据id获取href属性(磁力链接内容)第2个参数是默认参数#>$aEelement.GetAttributeValue("href", "")
} | Get-Unique# 暂停
Pause

四. 效果

  • 只是简易爬虫,并未做IP代理池和cookie池等防反扒机制
  • 频繁使用,在一段时间内会无法访问该网站

在这里插入图片描述

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

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

相关文章

linux驱动部分内容整理

文章目录 Linux驱动概念应用程序调用驱动程序流程驱动模块的加载linux设备号加载和卸载注册新字符设备注册设备节点自动创建设备节点编译编译驱动程序编译应用程序 地址映射ioctrl命令码的解析 并发与竞争原子操作自旋锁信号量互斥体 linux中断DMA映射其它printkmemcpyvolatile…

RocketMQ常用基本操作

文章中的rabbitmq使用的是rocketmq-all-5.1.3-bin-release版本&#xff0c;需要安装包的可自行下载 RockerMQ启动停止命令 启动命令 nohup sh bin/mqnamesrv & nohup sh bin/mqbroker -n localhost:9876 --enable-proxy & 查看日志 tail -f ~/logs/rocketmqlogs/…

明星中药企业系列洞察(九)一手好牌打的稀烂!近500年老字号锁定退市,太安堂为何“塌房”了?

近日&#xff0c;太安堂发布公告称&#xff0c;公司已收到深交所下发的《关于广东太安堂药业股份有限公司股票终止上市的决定》&#xff0c;深交所决定终止公司股票上市&#xff0c;预计其最后交易日期为7月4日。太安堂曾作为国内知名的中成药上市公司之一&#xff0c;是国家级…

matlab仿真 通信信号和系统分析(上)

&#xff08;内容源自详解MATLAB&#xff0f;SIMULINK 通信系统建模与仿真 刘学勇编著第三章内容&#xff0c;有兴趣的读者请阅读原书&#xff09; 一、求离散信号卷积和 主要还是使用卷积函数conv&#xff0c;值得注意的是&#xff0c;得到的卷积和长度结果为81&#xff0…

node.js+uniapp(vue),阿里云短信验证码

reg.vue: 思路是&#xff1a;前端调用获取验证码的接口 > 后端生成验证码返回给前端 > 前端渲染验证码 <template> <div> <input class"sl-input" v-model"phone" type"tel" maxlength"11" placeholder"手…

微信小程序毕业设计-微信食堂线上订餐系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【在线评论】不同视角下在线评论对客户满意度和推荐度的影响—推文分析—2024-07-01

今天的推文主题是【在线评论】&#xff0c;重点关注可以关注第四篇&#xff0c;很全面地分析了在线评论的信息多维性。 第一篇从客户的在线评论入手&#xff0c;将客户消费的动机为功利、享受、社会满足&#xff1b;第二篇是关于在线评论对消费者再次选择同一家酒店的机制探索…

MySQL之主从同步、分库分表

1、主从同步的原理 MySQL主从复制的核心是二进制日志 二进制日志&#xff08;binlog&#xff09;记录了所有DDL语句和DML语句&#xff0c;但不包括数据查询&#xff08;select、show&#xff09;语句。 1.1、复制分三步 master主库在事务提交时&#xff0c;会把数据变更记录…

电子战学习笔记01:电子战概论

0、写在文前 本人在学习电子战相关理论知识时&#xff0c;一直感觉无从下手&#xff0c;之后在老师的推荐下购买了《EW101&#xff1a;电子战基础》纸质书籍学习&#xff0c;所以将自己的学习笔记在CSDN上记录一下&#xff0c;也供有需要的同学参考。 1、电子战定义 电子战&…

全网最详细的 gin框架请求数据绑定Bind 源码解析 -- 帮助你全面了解gin框架的请求数据绑定原理和方法

在gin框架中&#xff0c;我们可以将多种请求数据&#xff08;json, form,uri&#xff0c;header等&#xff09;直接绑定到我们定义的结构体&#xff0c;底层是通过反射方式获取我们定义在结构体上面的tag来实现请求数据到我们的结构体数据的绑定的。 在gin的底层有2大体系的数据…

Python pip install模块时C++编译环境问题

pip install模块时C编译环境问题 在接触和使用python后&#xff0c;常常会通过pip install命令安装第三方模块&#xff0c;大多数模块可以直接安装&#xff0c;但许多新同学仍会遇见某些模块需要实时编译后才能安装&#xff0c;如报错信息大概是缺乏C编译环境&#xff0c;本文则…

【Elasticsearch】Elasticsearch索引创建与管理详解

文章目录 &#x1f4d1;引言一、Elasticsearch 索引的基础概念二、创建索引2.1 使用默认设置创建索引2.2 自定义设置创建索引2.3 创建索引并设置映射 三、索引模板3.1 创建索引模板3.2 使用索引模板创建索引 四、管理索引4.1 查看索引4.2 更新索引设置4.3 删除索引 五、索引别名…

Go-知识测试-性能测试

Go-知识测试-性能测试 1. 定义2. 例子3. testing.common 测试基础数据4. testing.TB 接口5. 关键函数5.1 testing.runBenchmarks5.2 testing.B.runN5.3 testing.B.StartTimer5.4 testing.B.StopTimer5.5 testing.B.ResetTimer5.6 testing.B.Run5.7 testing.B.run15.8 testing.B…

监听蓝牙对话的BlueSpy技术复现

本文是之前文章的BlueSpy技术的复现过程&#xff1a;https://mp.weixin.qq.com/s/iCeImLLPAwwKH1avLmqEpA 2个月前&#xff0c;网络安全和情报公司Tarlogic在西班牙安全大会RootedCon 2024上提出了一项利用蓝牙漏洞的BlueSpy技术&#xff0c;并在之后发布了一个名为BlueSpy的概…

git 提交代码忽略eslint代码检测

在暂存代码的时候会出现以上情况因为在提交代码的时候会默认运行代码进行检测&#xff0c;如果不符合代码规范就会进行报错 解决&#xff1a; 使用 git commit --no-verify -m xxx 忽略eslint的检测

Laravel 谨慎使用Storage::append()

在 driver 为 local 时&#xff0c;Storage::append()在高并发下&#xff0c;会存在丢失数据问题&#xff0c;文件被覆写&#xff0c;而非尾部添加&#xff0c;如果明确是本地文件操作&#xff0c;像日志写入&#xff0c;建议使用 Illuminate\Filesystem\Filesystem或者php原生…

邀请函 | 极限科技全新搜索引擎 INFINI Pizza 亮相 2024 可信数据库发展大会!

过去一年&#xff0c;在全球 AI 浪潮和国家数据局成立的推动下&#xff0c;数据库产业变革不断、热闹非凡。2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;“2024 可信数据库发展大会” 将于 2024 年 7 月 16-17 日在北京悠唐皇冠…

肆拾玖坊的商业模式,49坊新零售奖金制度体系,众筹众创+会员制

肆拾玖坊之所以能够在短时间内成为白酒行业的“现象级”企业,,不仅是依靠独特商业模式,同时也依靠的是坚持用户为核心,围绕用户需求,让用户与产品直接产生连接理念。 坐标&#xff1a;厦门&#xff0c;我是易创客肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工…

前端技术(二)——javasctipt 介绍

一、javascript基础 1. javascript简介 ⑴ javascript的起源 ⑵ javascript 简史 ⑶ javascript发展的时间线 ⑷ javascript的实现 ⑸ js第一个代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>…

Vue中的axios深度探索:从基础安装到高级功能应用的全面指南

文章目录 前言一、axios 请求1. axios的概念2. axios的安装3. axiso请求方式介绍4. axios请求本地数据5. axios跨域6. axios全局注册7. axios支持的请求类型1&#xff09;get请求2&#xff09;post请求3&#xff09;put请求4&#xff09;patch请求5&#xff09;delete请求 二、…