需要修复Scrape PHP脚本

时间:2012-03-01 10:06:20

标签: php mysql scraper

我们有一个PHP脚本,可以抓取搜索引擎结果页面并将客户网站位置输出到他们域名的定制报告包中。

谷歌在2月的第一周改变了一些东西,这阻止了我们的脚本在页面上检测到域名,我目前还没有在办公室找到原始开发人员,我们的其他任何员工都无法解决这个问题。

我非常确定我知道脚本中的问题在哪里,因为我不是开发人员,我不确定每条线路实际上在做什么。我们的脚本使用搜索结果中的相关类来确定我们寻找的实际位置。

脚本本身仍然可以运行并输出HTML。它纯粹只是脚本的一部分,用于寻找'域'在页面上没有被检测到。

我感谢你可能需要我提供更多信息才能提出问题的建议,我很乐意在必要时提供文件/编码。如果有必要的话,我也准备为此付出代价。

以下是我认为问题出现的地方: -

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos4 === false) {
    $mystring5 = $val[0];
    $findme5 = $prevlink;
    $pos5 = @strpos($mystring5, $findme5);
    // Note our use of ===.  Simply == would not work as expected
    // because the position of 'a' was the 0th (first) character.
    if ($pos5 === false) {
        $serp = $serp + 1;
        echo '<b>'.$serp.'.</b> '.$val[0].'<br /><br />';
        $link = get_string_between($val[1], 'href="', '" onmousedown');
        $link = str_replace('https://','',$link);
        $link = str_replace('http://','',$link);
        $link = str_replace('www.','',$link);
        $link;
        $prevlink = $link;
        $prevlink = str_replace(strstr($prevlink, '/'), "", $prevlink);
        $sitelen = strlen($row_site_check['website_name']);
        $sitefrom_link = substr($link, 0, $sitelen);
        if ($sitefrom_link == $row_site_check['website_name']) {
            $site_found = 1;
            $rank_postion = $serp;
            $site_link = $link;
            $con = mysql_connect("localhost","dbname","dbpass");
            if (!$con)
            {
                die('Could not connect: ' . mysql_error());
            }

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

查看Google rank scraper(php,opensource)

我每天都在使用基于它的软件,因为它已经发布,并且2月份Googles布局没有任何变化,这让我无法理解。

我不确定你是否会喜欢这个答案,但原因很可能是我粘贴的Rank Scraper使用DOM来解析谷歌的HTML,而你似乎依赖于正则表达式和字符串操作。
我个人试图在过去基于这些方法制作刮刀,并发现它需要大量的维护工作才能保持运行。有时真正丑陋的解决方法 使用DOM时,小的更改通常甚至不会损坏任何内容,否则调整代码可能会更容易 在过去几年中,该解析器的DOM代码在没有重大中断的情况下工作,只需要进行两次小的更改。谷歌在那段时间确实在他们的网站上做了很多改变,它只是没有造成不良影响。

上面链接的检查器的DOM函数可以在functions.php文件中找到

function process_raw($htmdata,$page)