ホームページ  >  記事  >  ウェブフロントエンド  >  PowerShell による Web フォームのクロール_html/css_WEB-ITnose

PowerShell による Web フォームのクロール_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:16:351442ブラウズ

今日、宣教師が書いたブログ投稿 http://www.cnblogs.com/piapia/p/5367556.html (PowerShell の 2 つのクローラー) を偶然見て、非常にインスピレーションを受けて自分でも捕まえてみました。しばらくすると、Web ページのテーブルが正常にキャプチャされました。私は英語版のシステムを使用しているため、中国語のシステム インターフェイスは文字列に変換されると文字化けしてしまうため、テストはすべて英語の Web ページで実行されます。

PowerShell 5 には ConvertFrom-String と呼ばれる新しい関数があり、文字列をオブジェクトに変換するために使用されます。パラメータの 1 つは、文字列の対応する部分を照合して、指定されたテンプレートに基づいてオブジェクトを生成することです。この関数を使用して Web ページ内のテーブルをクロールできます。

詳細なヘルプドキュメントのリンク

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

同じ文字列ですが、最初の文字列を使用します1 つ目の区切り文字はオブジェクトを生成するためのキャリッジ リターンとライン フィードで、2 つ目の区切り文字はマッチングにカスタム テンプレート形式を使用します。属性定義の形式は {} で区切られており、最初の定義には {属性名*:} が必要で、その後に * を追加する必要はありません。少なくとも 2 行のデータが一致する必要があることに注意してください。

最初のオブジェクトには 3 つの属性があり、P1 は 1 2 3 4、P2 は 4 5 6 7、P3 は 9 2 2 3 であることがわかります

2 番目のオブジェクトは各列に基づいて自動的に照合されます (すでに最初の 2 行に一致するテンプレートです)

次に 2 つの例を見ていきます。

最初の例はこの Web ページです。以下に示すように、オーストラリアのプロキシ サーバーのリストが含まれています。これを取得したいと思います

http://www.proxylisty.com/country/Australia-ip-list

基本的な考え方: invoke-restmethod は Web ページ全体を直接取得し、それを自動的に次のように変換します文字列オブジェクト。

次に、対応するテンプレートをデザインします。 htmlファイルなので、文字列に変換した後の対応するhtmlコードが入っています。したがって、重要なのは、HTML コードを使用してこれらのテーブル テンプレートを作成する方法です。

それは非常に簡単で、どの Web ページでも HTML のソース コードを表示できます。以下の大きな HTML コードについては、Web ページから対応する 2 行のテーブル コードを直接コピーして貼り付けるだけです。属性名を追加します。

その後、テンプレート マッチングに基づいて、対応するテーブル オブジェクトが自動的に生成されます

$web = 'http://www.proxylisty.com/country/Australia-ip-list'$template = @'<tr><td>{IP*:203.56.188.145}</td><td><a href='http://www.proxylisty.com/port/8080-ip-list' title='Port 8080 Proxy List'>{Port:8080}</a></td><td>HTTP</td><td><a style='color:red;' href='http://www.proxylisty.com/anonymity/High anonymous / Elite proxy-ip-list' title='High anonymous / Elite proxy Proxy List'>High anonymous / Elite proxy</a></td><td>No</td><td><a href='http://www.proxylisty.com/country/Australia-ip-list' title='Australia IP Proxy List'><img style='margin: 0px 5px 0px 0px; padding: 0px;' src='http://www.proxylisty.com/assets/flags/AU.png' title='Australia IP Proxy List'/>Australia</a></td><td>13 Months</td><td>2.699 Sec</td><td><div id="progress-bar" class="all-rounded"><div title='50%' id="progress-bar-percentage" class="all-rounded" style="width: 50%">{Reliability:50%}</div></div></td></tr><tr><td>{IP*:103.25.182.1}</td><td><a href='http://www.proxylisty.com/port/8081-ip-list' title='Port 8081 Proxy List'>{Port:8081}</a></td><td>HTTP</td><td><a style='color:red;' href='http://www.proxylisty.com/anonymity/Anonymous proxy-ip-list' title='Anonymous proxy Proxy List'>Anonymous proxy</a></td><td>No</td><td><a href='http://www.proxylisty.com/country/Australia-ip-list' title='Australia IP Proxy List'><img style='margin: 0px 5px 0px 0px; padding: 0px;' src='http://www.proxylisty.com/assets/flags/AU.png' title='Australia IP Proxy List'/>Australia</a></td><td>15 Months</td><td>7.242 Sec</td><td><div id="progress-bar" class="all-rounded"><div title='55%' id="progress-bar-percentage" class="all-rounded" style="width: 55%">{Reliability:55%}</div></div></td></tr>'@$temp=Invoke-RestMethod  -uri $web $result = ConvertFrom-String -TemplateContent $template   -InputObject  $temp $result  | sort reliability

キャプチャ成功

さらに一歩進んで、これらのキャプチャされたアドレスが実際に使用できるかどうかをテストして、関数を作成したいと思います。見てください

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"}

検査の結果、それらはすべて詐欺であることがわかりました

同様に、Douziも最近は健康食品に注目しているので、低GI食品とは何かを知りたいです

http://ultimatepaleoguide.com/glycemic-index-food-list

次の表を入手する必要があります

やったー

成功!

このメソッドは、特に Web ページのリスト情報を取得する必要がある場合に非常に便利です。もちろん、Web ページ自体が RESTFUL インターフェイスを提供している場合は、JSON 形式でコンテンツを直接取得できます。よりトラブルフリーに。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。