尽管这很有帮助,但大家都可以跳过这些背景信息。
背景
我有一个网站,里面收录了丹麦所有的心理学家。我的网站提供了所有诊所的联系信息以及用户评分。
我目前列出了12000名心理学家,其中大约6000人有一个网站。大约1000名心理学家访问了我的网站,并在他们的个人资料中填写了额外的"描述性"信息(如营业时间、价格等)
出于信息方面的原因,我试图自动(用PHP和RegEx)抓取那些没有向我的社区提供详细信息的人的网站。
我随机浏览了大约150个网站,得出的结论是,其中85%以上的网站都有关于"Velkommen"一词的有价值的文字。珍贵的!
问题
#1
我该如何在我的剧本中具体说明,我只想抓住大约360个字符,而不是更多。Ofc。这应该在Velkommen这个词之前(包括)。此外,脚本不应该区分大小写(尽管Velkommen通常拼写为大写V,但它可以在另一句话中弹出。)
此外,它应该是整个首页上最后一个出现的"velkommen",因为它有时会作为菜单/导航选项出现,这会很糟糕,因为我会抓住导航选项。
#2
目前,我的脚本将信息保存在多个数组中,然后保存在数据库中。
甚至不知道我该怎么做。什么是SEO的最佳选择;
- 将抓取的文本保存在MySQL中,并每次显示
- 每次都渲染相同的360个字符的文本[在"Velkommen"之后]
- 每次有人在我的网站上查看特定的心理学家时,从网站上随机呈现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
$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]);