Как получить контент с веб-страницы? - PullRequest
3 голосов
/ 14 июля 2009

Я хочу получить содержимое div с веб-страницы и использовать его на своей странице.

У меня есть URL http://www.freebase.com/search?limit=30&start=0&query=cancer
Я хочу получить содержимое div с идентификатором artilce-1001. Как я могу сделать это в php или jQuery?

Ответы [ 6 ]

6 голосов
/ 14 июля 2009

Если вы хотите использовать PHP, вы можете взглянуть на Simple HTML DOM . Это хороший единственный включаемый файл. В документах приведен пример очищающей косой черты в виде:

$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;
}

Regex никогда не был хорош (и никогда не должен использоваться) для анализа HTML. Это не регулярно, и вы получите огромные регулярные выражения для того, что было бы просто в jQuery или вышеупомянутой библиотеке

EDIT:
Таким образом, вы хотели бы использовать что-то вроде

$html = file_get_html('http://www.freebase.com/search?limit=30&start=0&query=cancer');
$text = $html->find('div[id=artilce-1001]',0)->plaintext;
2 голосов
/ 22 декабря 2009

Если речь идет о теме 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 напрямую и возвращает список JSON с возможными совпадениями для астрологического знака "Рак". Затем вы можете просто получить статью и изображение, используя trans_raw и / или trans_blurb , если вам нужно. :)

0 голосов
/ 14 июля 2009

PHP - на стороне сервера, jQuery - на стороне клиента, поэтому он действительно зависит от того, чего вы хотите достичь. Также обратите внимание, что из-за политики одного и того же происхождения вы, как правило, не можете выполнить запрос Ajax к другому домену через JavaScript в любом случае (но вы можете прокси-сервер через свой собственный сервер)

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");
0 голосов
/ 14 июля 2009

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);

Регулярное выражение, вероятно, не сработает, но вы можете использовать его как пример или направление, просто поиграйте с ним:)

0 голосов
/ 14 июля 2009

Используйте следующее

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

Пример такой на сайте jQuery здесь

0 голосов
/ 14 июля 2009

В PHP вы, вероятно, захотите получить страницу (возможно, используя CURL или аналогичную), тогда вам придется анализировать html, что, вероятно, не самая простая вещь, но я предполагаю, что есть библиотеки чтобы помочь вам с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...