【问题标题】:Scrape only x amount of characters - how?只刮 x 数量的字符 - 怎么做?
【发布时间】:2014-03-17 03:05:24
【问题描述】:

背景

我拥有一个为丹麦所有心理学家编制索引的网站。 我的网站提供所有诊所的联系信息以及用户评分。

我目前列出了 12.000 名心理学家,其中大约 6.000 名拥有网站。大约 1000 名心理学家访问了我的网站,并在他们的个人资料中填写了额外的“描述性”信息(例如开放时间、价格等)

出于提供信息的原因,我正在尝试自动抓取(使用 PHP 和 RegEx)未向我的社区提供详细信息的人的网站。

我随机浏览了大约 150 个网站,得出的结论是,超过 85% 的网站在“Velkommen”(=welcome,在丹麦语中)这个词之前都有有价值的文字。珍贵!

问题

#1

我如何在我的脚本中具体说明,我只想抓取大约。 360 个字符,仅此而已。办公室。这应该在 Velkommen 一词之前(并包括)。此外,脚本不应该区分大小写(虽然 Velkommen 通常拼写为大写 V,但它可以在另一个句子中弹出。)

此外,它应该是整个首页上最后出现的“velkommen”,因为它有时会作为菜单/导航选项出现,这很糟糕,因为我会抓住导航选项。

#2

目前 - 我的脚本将信息保存在数组中,然后保存在数据库中。

我什至不知道该怎么做。什么是 SEO 的最佳选择;

  1. 将抓取的文本保存在 MySQL 中并每次都显示。
  2. 每次都渲染相同的 360 字符文本 [紧随“Velkommen”]
  3. 每次有人在我的网站上查看特定的心理学家时,都会从网站随机呈现 360 个字符的文本。

一个示例网站:

$web = "http://www.psykologdorthelau.dk/";
$website = file_get_contents ($web);

preg_match_all("/velkommen.+?/sim", $website, $information);

//THIS SHOULD SPECIFICY THE VERY LAST 'VELKOMMEN' - it doesn't, I know :(
for($i = 0; $i < count($information[0]); $i++){

preg_match_all("/Velkommen (.+?)\"/sim", $information[0][$i], $text, PREG_SET_ORDER);

$psychologist[$i]['text'] = mysql_real_escape_string($text[0][1]);
}

感谢所有能解决这个难题的人,来自美妙的丹麦。

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    当您只想获取一定数量的数据时,您可以使用文件流。

    看起来像这样:

    $handle = fopen("http://www.example.com/", "r"); // open a filestream
    // Fetch for example only 10 bytes each time we check
    $chunkSize = 10;
    $contents = "";
    while ( !feof( $handle ) && strlen($contents) < 360) { 
        $buffer = fread( $handle, $chunkSize ); 
    
        $contents .= $buffer;
    
    } 
    $status = fclose( $handle ); 
    
    //your data is stored in $contents
    

    【讨论】:

    • 但这并没有说明抓取的数据应该在单词 'velkommen' 之前
    • 剩下的可以用一些基本的PHP知识填写; strcontains('velkommen') 例如...您是否希望有人为您编写整个代码,或者您只是提出一个问题来自己解决问题?这不是一个“雇用程序员”网站...
    【解决方案2】:

    “抓取的数据应该在单词 'velkommen' 之前”:

    preg_replace_callback('/velkommen(.*){360}/i',
      function($matched) {
        // Use $matched[1] to perform further testing
      },
      $contents
    );
    

    这很hacky,但它会让你开始。我相信需要 PHP 5.4。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2015-06-23
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      相关资源
      最近更新 更多