背景
我拥有一个为丹麦所有心理学家提供索引的网站。我的网站提供所有诊所的联系信息以及用户评级。
我目前列出了12.000名心理学家,其中约有6.000名有网站。大约有1000名心理学家访问了我的网站,他们用额外的“描述性”信息(如开放时间、价格等)填写了他们的个人资料。
我试图(用PHP和RegEx)自动抓取那些没有向我的社区提供详细信息的人的站点,原因很丰富。
我随机浏览了大约150个网站,得出的结论是,超过85 %的网站都有有价值的文本继续使用“Velkommen”(欢迎,在Denish中)。宝贝!
问题
#1
我如何在我的脚本中详细说明,我只想获得大约。360字,仅此而已。Ofc。这应该是前面(包括)的词Velkommen。此外,脚本不应该区分大小写(虽然Velkommen通常用大写V拼写,但它可以在另一个句子中弹出)。
而且,它应该是整个页面上最后出现的'velkommen‘,因为它有时会作为菜单/导航选项出现,这会很糟糕,因为我会抓取导航选项。
#2
当前-我的脚本将信息保存在数组中,然后保存在数据库中。
不知道我该怎么做。什么将是最优的SEO;
一个示例站点:
$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]);
}
感谢任何能解决这个难题的人,他们来自丹麦这个美丽的国家。
发布于 2014-02-17 18:14:29
当您只想获取一定数量的数据时,可以使用filestream。
看起来会是这样的:
$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
发布于 2014-02-17 19:38:03
“刮过的数据应该放在‘velkommen’这个词的前面”:
preg_replace_callback('/velkommen(.*){360}/i',
function($matched) {
// Use $matched[1] to perform further testing
},
$contents
);
这很烦人,但它会让你开始。我相信需要PHP 5.4。
https://stackoverflow.com/questions/21835513
复制相似问题