网页数据抓取软件( 如何利用PHP从网页上常见的元数据,以使您将要创造的介绍)

优采云 发布时间: 2022-03-26 12:07

  网页数据抓取软件(

如何利用PHP从网页上常见的元数据,以使您将要创造的介绍)

  

  您将要创建的介绍

  最近,我开始在 Yii 平台上建立一个社区站点,这将是我使用 Yii2 编程系列的一部分。我想让添加与 网站 内容相关的链接变得容易。人们很容易将 URL 粘贴到表单中,但同时提供标题和来源信息也变得很耗时。

  在今天的教程中,我将向您展示如何利用 PHP 从网页中抓取通用元数据,以使您的用户更容易参与和构建更有趣的服务。

  请记住,我参与了下面的评论线程,所以让我知道您的想法!您也可以在 Twitter @lookahead_io 上与我联系。

  入门

  首先,我构建了一个供人们粘贴 URL 的表单。我还创建了一个查找按钮来使用 AJAX 请求获取元数据信息来抓取网页。

  

  按 Lookup 通过 ajax 调用 Link::grab() 函数:

  $(document).on("click", '[id=lookup]', function(event) {

$.ajax({

url: $('#url_prefix').val()+'/link/grab',

data: {url: $('#url').val()},

success: function(data) {

$('#title').val(data);

return true;

}

});

});

  刮页

  Link::grab() 代码调用 fetch_og()。这模仿了一个爬虫来捕获页面并使用 DOMXPath 来获取元数据:

  public static function fetch_og($url)

{

$options = array('http' => array('user_agent' => 'facebookexternalhit/1.1'));

$context = stream_context_create($options);

$data = file_get_contents($url,false,$context);

$dom = new \DomDocument;

@$dom->loadHTML($data);

$xpath = new \DOMXPath($dom);

# query metatags with og prefix

$metas = $xpath->query('//*/meta[starts-with(@property, \'og:\')]');

$og = array();

foreach($metas as $meta){

# get property name without og: prefix

$property = str_replace('og:', '', $meta->getAttribute('property'));

$content = $meta->getAttribute('content');

$og[$property] = $content;

}

return $og;

}

  就我而言,我替换了上面的 og: 标签,但下面的代码会查找各种类型的标签:

  $tags = Link::fetch_og($url);

if (isset($tags['title'])) {

$title = $tags['title'];

} else if (isset($tags['metaProperties']['og:title']['value'])) {

$title=$tags['metaProperties']['og:title']['value'];

} else {

$title = 'n/a';

}

return $title;

}

  您还可以获取其他标签,如关键字、描述等。jQuery 然后将结果添加到表单以供用户提交:

  

  走得更远

  我还有一个源表,稍后会开发。但基本上,每次添加新 URL 时,我们都会将其解析为基础 网站 域并将其放入 Source 表中:

  $model->source_id = Source::add($model->url);

...

public static function add($url='',$name='') {

$source_url = parse_url($url);

$url = $source_url['host'];

$url = trim($url,' \\');

$s = Source::find()

->where(['url'=>$url])

->one();

if (is_null($s)) {

$s=new Source;

$s->url = $url;

$s->name = $name;

$s->status = Source::STATUS_ACTIVE;

$s->save();

} else {

if ($s->name=='') {

$s->name = $name;

$s->update();

}

}

return $s->id;

}

  现在,我正在手动更新源名称,以便它们在用户看来整洁,例如 ABC News、BoingBoing 和 Vice:

  

  希望在下一集中,我将回顾如何使用免费提供的 API 查找 网站 名称。奇怪的是,没有通用标签。如果只有互联网是完美的。

  付费墙网站

  一些网站(如《纽约时报》)不允许您抓取元数据,因为它们的付费墙很大。但他们确实有一个 API。由于文档杂乱,学习起来并不容易,但他们的开发人员很快就可以在 GitHub 上提供帮助。我还希望写 文章 关于在以后的节目中使用《纽约时报》头条新闻中的元数据查找。

  在结束时

  我希望你觉得这个抓取指南很有帮助,并在你的项目中使用它。如果你想看到它的实际效果,你可以在我的 网站Active Together 中尝试一些网络抓取。

  请在评论中分享任何想法和反馈。您也可以随时在 Twitter @lookahead_io 上直接与我联系。并确保查看我的讲师页面和其他系列 文章,使用 PHP 构建启动和使用 Yii2 编程。

  相关链接

  翻译自:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线