【问题标题】:Scrape Text With PHP & Display On Website使用 PHP 抓取文本并在网站上显示
【发布时间】:2014-07-24 01:50:18
【问题描述】:

我是 PHP 的初学者。我理解这些概念,但正在努力寻找我理解的教程。我的目标是:

  1. 使用 Firefox 的 xpath 插件来选择我想从网站上抓取的文本片段
  2. 正确格式化抓取的文本
  3. 在网站上显示文字

示例)

// Get the HTML Source Code
$url='http://steamcommunity.com/profiles/76561197967713768';
$source = file_get_contents($url);

// DOM document Creation
$doc = new DOMDocument;
$doc->loadHTML($source);

// DOM XPath Creation
$xpath = new DOMXPath($doc);

// Get all events
$username = $xpath->query('//html/body/div[3]/div[1]/div/div/div/div[3]/div[1]');
echo $username; 
?>

在这个例子中,我想抓取用户名(在撰写本文时是 mopar410)。

感谢您的帮助 - 我很迷茫 :( 现在我设法在 Google doc 电子表格中使用 xpath 和 importXML 并且有效,但我希望能够在我自己的网站上使用 PHP 来学习如何。

这是我在网上找到并编辑了 URL 和变量的代码 - 因为我自己不知道如何编写。

【问题讨论】:

  • 这里似乎没有问题
  • 嗨菲尔,对不起 - 似乎没有收到关于评论更新的通知。我的问题是,我很难找到一个最简单的合适教程......只是使用 php/xpath 抓取文本并在网站上显示该文本的基础知识。我找到了很多教程,但其中很多只是部分教程。上面的代码是我从众多来源汇总的,但它似乎不起作用。

标签: php xpath web-scraping domxpath


【解决方案1】:

他们有一个public API

只需使用http://steamcommunity.com/profiles/STEAM_ID/?xml=1

<?php

$profile = simplexml_load_file('http://steamcommunity.com/profiles/76561197967713768/?xml=1', 'SimpleXMLElement', LIBXML_NOCDATA);

echo (string)$profile->steamID;

输出:mopar410(撰写本文时)

这还提供了其他信息,例如 mostPlayedGame、hoursPlayed 等(查找 xml 节点名称)。

【讨论】:

  • 嗨,戴夫,感谢您抽出宝贵时间。此代码确实有效并显示了用户名。我能够遵循您所写内容的逻辑,尽管对您和其他人来说似乎很简单。如果我寻求其他网页示例的帮助可以吗?基本上我想做的是在一个网站上有一个页面,它需要一堆数据(用户名、统计数据等),然后将它们保存到数据库中......然后使用 php 从HTML 表中的数据库。
  • @user1502577 保存数据非常简单,您需要知道要保存的 xml 中的哪些节点,然后使用 mysqli 或 pdo,进行简单的插入。然后你有另一个页面,它只是从数据库中选择信息。 How do I insert and read data from a database? 恐怕这个问题太笼统了,here's 是 Google 的教程,如果你想看一些例子的话。
  • 会尽我所能。如果可以的话,我有几个关于这个主题的更具体的问题。使用您的具体示例,我尝试了另一个示例 steamcommunity.com/profiles/76561197967713768/stats/L4D2/?xml=1', 'SimpleXMLElement', LIBXML_NOCDATA); echo (string)$profile->hoursPlayed; ?> 由于某种原因,它似乎没有显示“hoursPlayed”文本。我只是在其他随机信息上尝试相同的过程来掌握它。谢谢
  • @Chatyak 使用print_r($profile)。有$profile-&gt;hoursPlayed2Wk,对于玩得最多的游戏,你可以使用$profile-&gt;mostPlayedGmes-&gt;mostPlayedGame[0]-&gt;hoursPlayed
  • @Chatyak 糟糕,我不小心输入了gmes。使用print_r($profile-&gt;mostPlayedGames-&gt;mostPlayedGame[0]-&gt;hoursPlayed);。无论如何,只需查看print_r($profile) 就很容易了。查看它生成的对象,您可以轻松浏览它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
相关资源
最近更新 更多