如何从网页上获取内容?

时间:2009-07-14 08:54:13

标签: php jquery

我想从网页中提取div内容并在我的页面中使用它。

我有网址http://www.freebase.com/search?limit=30&start=0&query=cancer 我想用id artilce-1001获取div内容。我怎么能在php或jQuery中做到这一点?

6 个答案:

答案 0 :(得分:6)

如果您想使用PHP,可能需要查看Simple HTML DOM。这是一个很好的单一包含文件。 docs给出了一个将slashdot刮到的示例:

$html = file_get_html('http://slashdot.org/');

// Find all article blocks
foreach($html->find('div.article') as $article) {
    $item['title']     = $article->find('div.title', 0)->plaintext;
    $item['intro']    = $article->find('div.intro', 0)->plaintext;
    $item['details'] = $article->find('div.details', 0)->plaintext;
    $articles[] = $item;
}

正则表达式从不擅长(并且永远不应该用于)解析HTML。这不是常规的,你最终会得到大量的正则表达式,用于简单的jQuery或上面的库

修改
所以你想要使用像

这样的东西
$html = file_get_html('http://www.freebase.com/search?limit=30&start=0&query=cancer');
$text = $html->find('div[id=artilce-1001]',0)->plaintext;

答案 1 :(得分:2)

如果这真的是关于Freebase主题而不是从网站获取HTML,那么使用API并熟悉MQL应该是更好的解决方案,因为那样做允许您轻松限制特定类型的搜索。

示例:

[{
  "/common/topic/article": {
    "guid":     null,
    "limit":    1,
    "optional": true
  },
  "/common/topic/image": {
    "id":       null,
    "limit":    1,
    "optional": true
  },
  "id":     null,
  "name":   null,
  "name~=": "*Cancer*",
  "type":   "/user/radiusrs/default_domain/astrological_sign"
}]​

可以传递给mqlread directly并返回一个JSON列表,其中包含占星符号“Cancer”的可能匹配项。然后,如果需要,您可以使用trans_raw和/或trans_blurb来获取文章和图片。 :)

答案 2 :(得分:0)

在PHP中你可能想要获取页面(可能使用CURL或类似的东西)然后你将不得不解析html,这可能不是最简单的事情,但我猜是有库出来那里可以帮助你。

答案 3 :(得分:0)

使用以下

$("#LoadIntoThisDiv").load("http://www.freebase.com/search?limit=30&start=0&query=cancer #artilce-1001");

在jQuery网站here

上有一个这样的例子

答案 4 :(得分:0)

PHP:

$content = file_get_contents('http://www.freebase.com/search?limit=30&start=0&query=cancer');

$match = preg_match("#id=\"article-1001\".*</div>#", $content, $matches);

正则表达式可能不起作用,但它是您可以使用的示例或方向,只需使用它:)

答案 5 :(得分:0)

PHP是服务器端,jQuery是客户端,所以它实际上取决于你想要实现的目标。另请注意,由于same-origin policy,您通常无法通过javascript对其他域执行Ajax请求(但您可以通过自己的服务器代理)

抛开jQuery,这是一个在PHP中使用的简单方法,它适用于您提供的案例

$url="http://www.freebase.com/search?limit=30&start=0&query=cancer";
$html=file_get_contents($url);

if (preg_match('{<div id="article-1001".*?>(.*?)</div>}s', $html, $matches))
{
    $content=$matches[1];
}

注意's'修饰符,它会产生。匹配换行符和。*?成语,这使得匹配内部非贪婪,以便只吃掉下一个</div>

这适用于您的情况,但正则表达式通常不适合此任务。您可以将HTML加载到DOmDocument并以这种方式访问​​它。

$doc = new DOMDocument();
$doc->loadHTML($html);
$div=$doc->getElementById("article-1001");