背景
我拥有一个为丹麦所有心理学家编制索引的网站。 我的网站提供所有诊所的联系信息以及用户评级。
我目前正在列出12.000名心理学家,其中约有6000名拥有一个网站。大约1000名心理学家访问了我的网站,并用其他“描述性”信息(如营业时间,价格等)填写了他们的个人资料。
出于提供信息的原因,我正在尝试自动抓取(使用PHP和RegEx)那些没有向我的社区提供详细信息的网站。
我经历了一个随机的150个网站,并得出结论,超过85%的网站,有价值的文字继续“Velkommen”(=欢迎,在丹麦语)。珍贵!
问题
#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]);
}
感谢所有能够解决这个难题的人,来自这个美妙的丹麦国家。
答案 0 :(得分: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
答案 1 :(得分:1)
“被删除的数据应该在'velkommen'这个词之前”:
preg_replace_callback('/velkommen(.*){360}/i',
function($matched) {
// Use $matched[1] to perform further testing
},
$contents
);
这很hacky,但它会让你开始。我相信需要PHP 5.4。