我正在尝试从此http://jsbin.com/noxuqusoga/edit?html
输出html页面获取代理和端口值。
这里是该页面中表结构的示例,仅包含一个tr
,但实际的HTML具有许多具有相似结构的tr
元素:
<table class="table" id="tbl_proxy_list" width="950">
<tbody>
<tr data-proxy-id="1355950">
<td align="left"><abbr title="103.227.175.125">103.227.175.125 </abbr></td>
<td align="left"><a href="/proxy-server-list/port-8080/" title="Port 8080 proxies">8080</a></td>
<td align="left"><time class="icon icon-check timeago" datetime="2018-08-18 04:56:47Z">9 min ago</time></td>
<td align="left">
<div class="progress-bar" data-value="22" title="1089">
<div class="progress-bar-inner" style="width:22%; background-color: hsl(26.4,100%,50%);"> </div>
</div>
<small>1089 ms</small></td>
<td style="text-align:center !important;"><span style="color:#009900;">95%</span> <span> (94)</span></td>
<td align="left"><img alt="sg" class="flag flag-sg" src="/assets/images/blank.gif" style="vertical-align: middle;" /> <a href="/proxy-server-list/country-sg/" title="Proxies from Singapore">Singapore <span class="proxy-city"> - Bukit Timah </span> </a></td>
<td align="left"><span class="proxy_transparent" style="font-weight:bold; font-size:10px;">Transparent</span></td>
<td><span>-</span></td>
</tr>
</tbody>
</table>
我能够取消代理地址,但是由于<td>
没有ID或类,并且值包含一些超链接,而另一些则没有,我在端口上遇到了困难。
如何为整个废弃结果生成-> ip:port
之类的结果。
这是我的代码
$html = file_get_html('http://jsbin.com/noxuqusoga/');
// Find all images
foreach($html->find('abbr') as $element)
echo $element->title . '<br>';
foreach($html->find('td a') as $element)
echo $element->plaintext . '<br>';
请帮助,
谢谢
答案 0 :(得分:1)
与其为graph = new UndirectedGraph<State, DefaultEdge>(DefaultEdge.class);
元素(或其中的元素,如td
或abbr
)编写选择器,不如为其a
父元素编写选择器,然后遍历这些元素tr
s(行),并为每一行获取所需的该行的子级:
tr
作为一种选择,您应该知道选择元素时,除了使用css选择器之外,还可以选择通过元素的索引来获取元素。在您的情况下,每个// Select all tr elements inside tbody
foreach ($html->find('tbody tr') as $row)
// the second parameter (zero) indicates we only need the first element matching our selector
// ip is in the first <abbr> element that is child of a td
$ip = $row->find('td abbr', 0)->plaintext;
// port is in the first <a> element that is child of a td
$port = $row->find('td a', 0)->plaintext;
print "$ip:$port\n";
}
所需要的是每个tr
元素内的第一个和第二个td
元素。因此,您还可以找到每个tr
的第一个和第二个孩子来提取数据。