2016-04-06 9 views
1

Webバッチを使用してWeb HTMLページからデータを解析することは可能ですか?Windowsバッチ/ html Webページのデータ解析

のは、私は、Webページを持っているとしましょう:www.domain.com/data/page/1 ページのソースHTML:この場合、

... 
<div><a href="/post/view/664654"> .... 
.... 

私は、Webから入手/ポスト/ビュー/ 664654が必要になりますページ。

私のアイデアはwww.domain.com/data/page/1 ...#(特定の番号に)をループして、/ post/viewのすべてを抽出することです。それから私はリンクのリストを持っていて、それらのリンクのそれぞれからhref値(画像やビデオのいずれか)を抽出します。

これまでのところ、私はwgetを使って正確なリンクを知っていれば、イメージやビデオのダウンロードに成功しました。しかし、私はHTMLデータを解析する方法(可能な場合)についてはわかりません。

編集

<body> 
<nav> 
    <section>links I dont need</section> 
</nav> 
<article> 
    <section>links I need</section> 
</article> 

+0

は、私たちが従うことができるのXPathまたはDOM階層を手に入れましたか? divの親はIDを持っていますか?あるいは文書の最初の ''タグでしょうか? [これのようなもの](http://stackoverflow.com/a/29280851/1683264)が良い出発点かもしれません。 – rojo

+0

私は、ドキュメントの任意のタグからhrefコンテンツを抽出する必要があります。だから私はリストを作ることができた。それは可能ですか? – CrazySabbath

答えて

1

むしろフラットなテキストとしてこするよりも、階層オブジェクトとして構造化されたマークアップを解析する方が良いでしょう。そうすることで、解析しているデータのフォーマットにあまり依存していない(それが縮小されているか、間隔が変更されたかなど)。

バッチ言語は、HTML、XML、JSONなどのマークアップ言語の解析にはあまり適していません。そのような場合、ハイブリッドスクリプトを使用してJScriptまたはPowerShellのメソッドを借りてスクレイプするあなたが必要とするデータ。次に、バッチ+ JScriptハイブリッドスクリプトの例を示します。これを.bat拡張子で保存し、実行します。

@if (@CodeSection == @Batch) @then 
@echo off & setlocal 

set "url=http://www.domain.com/data/page/1" 

for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%url%"') do (
    rem // do something useful with %%I 
    echo Link found: %%I 
) 

goto :EOF 
@end // end batch/begin JScript hybrid code 

// returns a DOM root object 
function fetch(url) { 
    var XHR = WSH.CreateObject("Microsoft.XMLHTTP"), 
     DOM = WSH.CreateObject('htmlfile'); 

    XHR.open("GET",url,true); 
    XHR.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    XHR.send(''); 
    while (XHR.readyState!=4) {WSH.Sleep(25)}; 
    DOM.write('<meta http-equiv="x-ua-compatible" content="IE=9" />'); 
    DOM.write(XHR.responseText); 
    return DOM; 
} 

var DOM = fetch(WSH.Arguments(0)), 
    links = DOM.getElementsByTagName('a'); 

for (var i in links) 
    if (links[i].href && /\/post\/view\//i.test(links[i].href)) 
     WSH.Echo(links[i].href); 
+0

残念ながら、それはexptedとして機能していません。 Webページには、〜href = "/ post/view/1234#search = SearchString"のように〜30のリンクがあります。スクリプトは6個しか抽出せず、すべてが間違っています(例: '/ post/view/141143#c63445')。 – CrazySabbath

+0

あなたがログインしているかどうかによって、ページの内容が異なる場合がありますか?私はクッキー管理やログインセッションの処理を記述しませんでした。 – rojo

+0

ログインしているかどうかに違いはありません。 – CrazySabbath