如何从HTML页面获取信息?

时间:2016-06-03 07:59:14

标签: html powershell

请帮助我从这个结构中获取信息:

<table id="id1" class="class1">
<tbody>
    <tr id="id2">
        <td>
            <span class="class2">
            <a href="/folder1/folder2/id412217">"header text"</a>
            </span>
        </td>
        <td id="d" style="width:10px;">
            <img style="width:10px;" src="/images/img1.gif">
        </td>
        <td id="r" style="width:40%;">
            <span class="class2">
                <nobr>Headings:</nobr>
            </span>
        </td>
    </tr>
    <tr>
        <td>
            <table class="class1" style="width:100%;">
                <tbody>
                    <tr>
                        <td width="300" valign="top"></td>
                    </tr>
                    <tr>
                        <td style="padding:0px;">
                            <div>
                                <b>Address: </b>
                                <a href="/folder1/folder2/id412217">Address text</a>
                            </div>
                            <div>
                                <b>Tel.: </b>
                                250-1729
                            </div>
                            <br>
                        </td>
                    </tr>
                </tbody>
            </table>
        </td>
        <td>
            <img src="/images/img.gif">
        </td>
        <td>
            <a href="/yp/folder2/rubric1067/">heading1</a>
            <br>
            <a href="/yp/folder2/rubric1068/">heading2</a>
            <br>
            <a href="/yp/folder2/rubric1063/">heading3</a>
            <br>
        </td>
    </tr>
</tbody>

我想得到:

  • 标题文字
  • 地址文字
  • 电话。编号

但我不明白,我怎样才能使用PowerShell。

首先,我得到这张表

$address = "http://address.com"
$page  = Invoke-WebRequest $address
$table = $($page.parsedhtml.getElementsByTagName("table") | Where { $_.id -eq 'id1' })

下一步是什么? 如何调用桌子的孩子并获取他们的文本?

2 个答案:

答案 0 :(得分:2)

这是我的决定:

$address = "http://address.com"
$page  = Invoke-WebRequest $address
$table = $($page.parsedhtml.getElementById("id1")
$tr = $table.getElementsByTagName('tr') | Where { $_.id -eq 'id2' }
$name=($tr.getElementsByTagName('a') | select -First 1).innertext
$divs=$table.getElementsByTagName('div')
    foreach ($div in $divs) {
        if ($div.innertext -match "address: ") {$adr=$div.innertext -replace "Address: ",""}
        if ($div.innertext -match "Tel.: ") {$tel=$div.innertext -replace "Tel.: ",""}
    }
$resultmassive+=[string]::Join(";",$name,$adr,$tel)

P.S。也许,有可能使用PowerShell switch-case construcion而不是foreach,但它对我不起作用。

答案 1 :(得分:0)

首先:如果您的元素具有ID,请使用$data=$collection1->aggregate(array( '$group'=> array('_id'=>$valoreScelto,'contatore'=>array('$sum'=>1)))); 而不是$valoreScelto = trim('$'.$campoSelezionato); 并使用其他过滤器。这将立即为您提供正确的表格(或其他元素)。

当您拥有(父)元素时,您可以通过在父级上调用Fatal error: Call to a member function aggregate() on string getElementById()等来获取嵌套元素:

getElementsByTagName()

在你的情况下你想得到

  • 标识为getElementById()的子元素,然后是(大)子元素getElementsByTagName()元素(标题文本)

    $nestedTables = $table.getElementsByTagName('table')
    
  • 嵌套表格中的id2元素(地址和电话号码):

    <a>