简单的html dom解析器从表中获取tr

时间:2018-09-28 08:28:15

标签: php dom web-scraping html-table simple-html-dom

我正在尝试废弃http://spys.one/free-proxy-list/,但在这里我只想获取Proxy by ip:port列 我检查了网站上有3张桌子

有人可以帮我吗?

<?php
    require "scrapper/simple_html_dom.php";

    $html=file_get_html("http://spys.one/free-proxy-list/");
    $html=new simple_html_dom($html);

    $rows = array();
    $table = $html->find('table',3);

    var_dump($table);

2 个答案:

答案 0 :(得分:0)

尝试以下脚本。它应该只获取您所需的项目,而不会其他:

<?php
include 'simple_html_dom.php';
$url = "http://spys.one/free-proxy-list/";

$html = file_get_html($url);
foreach($html->find("table[width='65%'] tr[onmouseover]") as $file) {
    $data     = $file->find('td', 0)->plaintext;
    echo $data . "<br/>";
}
?>

它产生的输出如下:

 176.94.2.84
 178.150.141.93
 124.16.84.208
 196.53.99.7
 31.146.161.238

答案 1 :(得分:-1)

我真的不知道您的简单html dom库是做什么的。无论如何。如今,PHP具备了解析特定dom元素所需的全部功能。只需使用PHP自己的DOMXPath class来查询dom元素即可。

这是获取表第一列的简短示例。

$dom = new \DOMDocument();
$dom->loadHTML('https://your.url.goes.here');

$xpath = new \DomXPath($dom);

// query the first column with class "value" of the table with class "attributes"
$elements = $xpath->query('(/table[@class="attributes"]//td[@class="value"])[1]');

// iterate through all found td elements
foreach ($elements as $element) {
    echo $element->nodeValue;
}

这是一个可能的示例。它不能完全解决http://spys.one/free-proxy-list/的问题。但是它向您展示了如何轻松获得特定表的第一列。现在唯一要做的就是在给定站点的dom中找到要查询的表的正确查询。由于给定站点的dom是很久以前的非常复杂的表布局,并且要解析的表没有唯一的ID或其他内容,因此必须找出来。