尝试从网站上的表格中删除数据。我得到了以下PHP编写,但它无法正常工作。
收到以下错误:注意:尝试在第27行的DataScraping.php中获取非对象的属性
//Sets the HTML DOM Library
require_once 'C:/xampp/php/lib/SimpleHTMLDOM/simple_html_dom.php';
$html = new simple_html_dom();
$html = file_get_html('https://www.flightradar24.com/data/flights/british-airways-ba-baw');
foreach($html->find('table[id=tbl-datatable]') as $datatable) {
foreach($datatable->find('tr') as $tr) {
foreach($tr->find('td') as $td) {
if(strpos($td->find('a', 0)->href, 'https://www.flightradar24.com/data/flights/') !== false) {
echo $td->find('a', 0)->innertext .", " .$td->find('a', 0)->href;
}
}
}
}
另外值得一提的是,这些数据是公开的,仅供个人使用。请不要对版权侵权发表评论 - 我想做的事情没有错。
我只是试图仅搜索航班号,包括内部文本和后面站点的URL。对我出错的地方有任何帮助吗?
附加测试提供了我需要的数据,但行之间的错误相同:
foreach($html->find('table[id=tbl-datatable]') as $datatable) {
foreach($datatable->find('tr') as $tr) {
foreach($tr->find('td') as $td) {
if (strpos($td->find('a', 0)->href, '/data/flights/') !== false) {
$test = $td->find('a', 0)->href;
$test2 = $td->find('a', 0)->innertext;
echo $test .", " .$test2;
}
}
}
}
答案 0 :(得分:0)
您尝试在if
语句中访问空引用的元素,因为并非所有<TD>
标记都包含<A>
个标记。如果<A>
中没有$td
标记,$td->find('a', 0)
为空,那么
$td->find('a', 0)->href
正是您的错误消息所说的:“试图获得[a]非对象的[a]属性。”
您可以通过使用find()
检查if
的结果为空来解决此问题:
$atag = $td->find('a', 0)
if ($atag) {
// ...
}
您可以使用if
运算符将其折叠到单个&&
语句中。您在运行代码时遇到了另外几个问题:
'https://www.flightradar24.com'
时,你找不到它们echo
总结一下我的建议,这样的事情似乎有效:
foreach($tr->find('td') as $td) {
$atag = $td->find('a', 0);
if($atag && strpos($atag->href, '/data/flights/') !== false) {
echo $atag->innertext . ", " . $atag->href . "\n";
}
}