关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
8年前关闭。
Improve this question
你们都可以跳过这个背景信息,尽管它很有帮助。
背景
我拥有一个索引丹麦所有心理学家的网站。
我的网站提供所有诊所的联系信息以及用户评分。
我目前列出了 12.000 名心理学家,其中大约 6.000 名拥有网站。大约 1000 名心理学家访问了我的网站,并在他们的个人资料中填写了额外的“描述性”信息(例如开放时间、价格等)
出于提供信息的原因,我正在尝试自动抓取(使用 PHP 和 RegEx)那些没有向我的社区提供详细信息的网站。
我随机浏览了大约 150 个网站,得出的结论是,超过 85% 的网站在“Velkommen”(=welcome,丹麦语)这个词前有有值(value)的文字。宝贵的!
问题
#1
我如何在我的脚本中具体说明,我只想捕获大约。 360 个字符,仅此而已。办公室。这应该在 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]);
}
感谢任何能解决这个难题的人,来自美妙的丹麦。
最佳答案
尝试这样的事情:
<?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]);
关于php - 使用 RegEx 将抓取限制为 X 个字符 + 其他规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819599/