我正在使用simple html dom将记录写入数据库,但它似乎并没有写入记录。
问题在于foreach循环。它输出所有网址和以下错误:
注意:未定义的变量:第28行的C:\ xampp \ htdocs \ meh \ crawler.php中的url
<?php
// Create connection
$con=mysqli_connect("localhost","root","spidermankillssuperman","expatriates");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
<?php
include_once('../simple_html_dom.php');
$links = array (
'http://www.expatriates.com/classifieds/bhr/hs/index100.html'
);
foreach ($links as $link) {
$html = file_get_html($link);
foreach($html->find('a') as $element) {
if(strpos($element->href, "cls"))
$url = "http://expatriates.com".$element->href . '<br>';
echo $url;
}
$sql="INSERT INTO urlstocrawl (url)
VALUES ('$url')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo '<br>'.'<p>'."1 record added";
}
mysqli_close($con);
?>
答案 0 :(得分:3)
您希望您的mysql查询在您的html文件中插入 foreach 链接,而不是在循环后运行一次。在循环中移动代码:
foreach ( $html->find('a') as $element ) {
if ( strpos($element->href, "cls") !== false ) {
$url = "http://expatriates.com" . $element->href . '<br>';
$sql = "INSERT INTO urlstocrawl (url) VALUES ('$url')";
if ( !mysqli_query($con,$sql) ) {
die('Error: ' . mysqli_error($con));
}
echo '<br>'.'<p>'."1 record added" . $url;
}
}
请注意对if
条件的修改。当字符串不存在时,strpos()
返回false
或者指示位置的整数,从0开始。这意味着如果cls
位于字符串的开头,则条件可能会失败。通过这种严格的类型检查,您可以确定所需的行为。