我想从网页中提取div内容并在我的页面中使用它。
我有网址http://www.freebase.com/search?limit=30&start=0&query=cancer 我想用id artilce-1001获取div内容。我怎么能在php或jQuery中做到这一点?
答案 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");