使用PHP和Simple HTML DOM刮取搜索结果

时间:2018-03-27 18:57:31

标签: php web-scraping

我正在制作网络抓取工具,其目标是允许用户输入搜索字词,点击提交按钮,并接收与其搜索相关的项目列表。

基本上就像搜索引擎一样,但我希望搜索从这里开始,而不是谷歌:https://digitalcommons.colby.edu/special_collections/

下面的脚本大部分都有效,但我希望$searchString来自表单上的输入字段,然后在单击提交按钮后返回结果列表。我目前正在使用simple_html_dom.php。

非常感谢任何帮助或指示。

<?php 
include_once('assets/inc/simple_html_dom.php');

$searchString = "Significant Inventions";
$in = $searchString;
$in = str_replace(' ','+',$in); // space is a +
$url  = 'http://www.google.com/search?hl=en&tbo=d&site=&source=hp&q='.$in.'&oq='.$in.'';

echo '<h2>Title: ' . $searchString . '</h2>';
echo '<span>Title: ' . $url . '<span><hr>';

$html = file_get_html($url);

$i=0;
$linkObjs = $html->find('h3.r a'); 
foreach ($linkObjs as $linkObj) {
    $title = trim($linkObj->plaintext);
    $link  = trim($linkObj->href);

    // if it is not a direct link but url reference found inside it, then extract
    if (!preg_match('/^https?/', $link) && preg_match('/q=(.+)&amp;sa=/U', $link, $matches) && preg_match('/^https?/', $matches[1])) {
        $link = $matches[1];
    } else if (!preg_match('/^https?/', $link)) { // skip if it is not a valid link
        continue;
    }

    $descr = $html->find('span.st',$i); // description is not a child element of H3 thereforce we use a counter and recheck.
    $i++;   
    echo '<p>Title: ' . $title . '<br />';
    echo 'Link: <a href="' . $link . '" target="_blank">Read More</a><br />';
    echo 'Description: ' . $descr . '</p><hr>';
}
?>

上述脚本已从Scraping Google Front Page Results with php修改。

0 个答案:

没有答案