PowerShell抓取网页表格_html/css_WEB-ITnose
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PowerShell抓取网页表格_html/css_WEB-ITnose,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3568字,纯文字阅读大概需要6分钟。
内容图文
![PowerShell抓取网页表格_html/css_WEB-ITnose](/upload/InfoBanner/zyjiaocheng/406/35aae39918f1423a950acf09f991c072.jpg)
PowerShell 5里面有一个新的函数叫做ConvertFrom-String, 他的作用是把字符串转换成对象。其中一个参数是可以根据指定的模板,把对应的那一部分字符串匹配出来生成对象,我们可以利用这个功能抓取网页中的表格。
详细帮助文档链接
https://technet.microsoft.com/library/dn807178(v=wps.640).aspx
首先看个基本例子
$a=@'1 2 3 45 6 7 89 2 2 3'@$t=@'{Co1*:1} {Co2:2} {Co3:3} {Co4:4}{Co1*:5} 6 7 8'@$c=$a | ConvertFrom-String -Delimiter "\r\n"$d=$a | ConvertFrom-string -TemplateContent $t
同样的字符串,第一个我用分隔符回车换行来生成一个对象;第二个我用自定义的模板格式来进行匹配。注意属性定义的格式写法 {}隔开,然后第一个需要{属性名字*:},后面不需要加*,至少需要匹配2行数据才行。
可以看见第一个对象有3个属性,P1是1 2 3 4,P2 是 4 5 6 7 ,P3是9 2 2 3;
第二个对象则是根据每一列来自动匹配的(已经有一个模板匹配了前2行)
接下来我们来看2个实例。
第一个例子是这个网页,里面有一个澳洲代理服务器的列表,如下所示,我想抓出来
http://www.proxylisty.com/country/Australia-ip-list
基本思路:invoke-restmethod直接抓取整个网页,自动转换为string对象。
然后设计对应的模板。因为是html文件,转换为string以后对应的html代码都在里面。因此关键是怎么把这些带有html代码的表格模板弄出来。
很简单,网页都可以查看html的源代码,下面一大段html的代码可以直接从网页上复制粘贴对应的2行表格代码即可,稍加修改添加属性名字就行了。
然后根据模板匹配就会自动生成对应的表格对象了
$web = 'http://www.proxylisty.com/country/Australia-ip-list'$template = @'{IP*:203.56.188.145} {Port:8080} HTTP High anonymous / Elite proxy No Australia
13 Months 2.699 Sec {Reliability:50%}'@$temp=Invoke-RestMethod -uri $web $result = ConvertFrom-String -TemplateContent $template -InputObject $temp $result | sort reliability {IP*:103.25.182.1} {Port:8081} HTTP Anonymous proxy No Australia
15 Months 7.242 Sec {Reliability:55%}
成功抓取
我还可以更进一步,我想测试一下这些抓取下来的地址是否真的可以用,写个function测试看看
function Test-Proxy{[cmdletbinding()]param( [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, position=0 ) ] [string]$server, [string]$url = "http://www.microsoft.com")write-host "Test Proxy Server: $server" -NoNewline$proxy = new-object System.Net.WebProxy($server)$WebClient = new-object System.Net.WebClient$WebClient.proxy = $proxyTry{ $content = $WebClient.DownloadString($url) Write-Host " Opened $url successfully" -ForegroundColor Cyan}catch{ Write-Host " Unable to access $url" -ForegroundColor Yellow }}foreach ($r in $result){$servername="http://"+$r.IP+":"+$r.PortTest-proxy -server $servername -url "www.google.com"}
测试标明都是坑货
类似的,豆子最近比较关注健康食物,我想看看低GI的食物有哪些
http://ultimatepaleoguide.com/glycemic-index-food-list
需要把下面这个表格抓出来
$t2=@'{Food*:Banana cake, made with sugar} {GI:47} {Size:60} '@$web2='http://ultimatepaleoguide.com/glycemic-index-food-list/'$temp=Invoke-RestMethod -uri $web2 $result1 = ConvertFrom-String -TemplateContent $t2 -InputObject $temp $result1 | Out-GridView {Food*:Banana cake, made without sugar} {GI:55} {Size:60}
成功!
这种方式很有用,尤其是需要获取网页某些列表信息的时候,当然,如果网页本身就提供RESTFUL的接口,可以直接获取JSON格式的内容 那就更省事了。
内容总结
以上是互联网集市为您收集整理的PowerShell抓取网页表格_html/css_WEB-ITnose全部内容,希望文章能够帮你解决PowerShell抓取网页表格_html/css_WEB-ITnose所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。