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

WBOY
リリース: 2016-06-24 11:16:35
オリジナル
1389 人が閲覧しました

今日、宣教師が書いたブログ投稿 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 = @'{IP*:203.56.188.145}{Port:8080}HTTPHigh anonymous / Elite proxyNoAustralia13 Months2.699 Sec
{Reliability:50%}
{IP*:103.25.182.1}{Port:8081}HTTPAnonymous proxyNoAustralia15 Months7.242 Sec
{Reliability:55%}
'@$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 形式でコンテンツを直接取得できます。よりトラブルフリーに。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!