一. 需求
⏹有网站如下所示,先要求从按照关键词搜索到的网页中,提取出所有的磁力链接。
二. 分析
2.1 思路分析
- 打开网页之后,从网页中先提取出所有的标题相关的url
- 然后再打开所有提取到的url
- 再从每一个新打开的页面中获取磁力链接所在a标签的href属性值
2.2 技术点
Invoke-WebRequest
:发送网络请求workflow
- workflow 是一种特殊的语法结构,用于创建并发执行的工作流。工作流允许你定义一系列步骤,这些步骤可以同时执行或并行执行,适用于需要处理大量数据或需要在多个计算资源上执行任务的情况。
- 在 foreach -parallel 循环内并行执行多个任务,从而加快处理速度。
InlineScript { ... }
:内联脚本块用于在工作流中执行本地 PowerShell 脚本或命令。
Add-Type -Path ".\xxx.dll"
:用于引入第三方dllNew-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/