使用RegEx限制刮取X个字符+其他规格

时间:2014-02-17 02:11:51

标签: php mysql regex

你可以跳过这个背景信息,虽然它有用。

背景

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

我目前正在列出12.000名心理学家,其中约有6000名拥有一个网站。大约1000名心理学家访问了我的网站,并用其他“描述性”信息(如营业时间,价格等)填写了他们的个人资料。

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

我经历了一个随机的150个网站,并得出结论,超过85%的网站,有价值的文字继续“Velkommen”(=欢迎,在丹麦语)。珍贵!

问题

#1

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

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

#2

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

不确定我该如何做到这一点。 SEO的最佳选择;

  1. 将已删除的文本保存在MySQL中并每次都显示。
  2. 每次[跟随'Velkommen']
  3. 渲染相同的360个字符的文本
  4. 每次有人在我的网站上查看特定的心理学家时,都会从网站上呈现随机的360字符文字。
  5. 这是一个示例网站和我当前的脚本:

    $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]);
    }
    

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

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

<?php

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

// TRY TO FIND ALL OF THE MATCHES
preg_match_all('/velkommen.{1,351}/ims', $website, $matches);

// PULL OUT THE LAST ITEM FROM THE `$matches`
$last_velkommen = array_pop($matches[0]);