Bir web sayfasının içeriği almak için nasıl?

6 Cevap php

Ben bir web sayfasından div içeriği getirmesi ve benim sayfa kullanmak istiyorum.

I have the url http://www.freebase.com/search?limit=30&start=0&query=cancer
I want to fetch div content with id artilce-1001. How can I do that in php or jQuery?

6 Cevap

PHP kullanmak istiyorsanız, Simple HTML DOM bakmak isteyebilirsiniz. Bu güzel tek bir dosya include. docs olarak Slashdot kazıma bir örnek vereyim:

$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 herhangi bir iyi değildir (ve için asla kullanılmamalıdır) ayrıştırma HTML. Bu normal değil, ve jQuery veya yukarıdaki kütüphanede basit olurdu ne için büyük düzenli ifadeler ile sona

EDIT:
So you would want to use something like

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

Bu gerçekten bir Freebase konu hakkında değil, genel olarak bir web sitesinden HTML alma API kullanarak ve aşina alma hakkında ise MQL daha iyi bir çözüm olmalı O kolayca belirli türleri aramanızı kısıtlamak için izin verecek beri.

Örnek:

[{
  "/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 geçirilen ve Burcunuz "Kanser" için olası eşleşmeleri ile bir JSON liste döndürür edilebilir. Eğer gerekiyorsa ardından, sadece, trans_raw ve / veya trans_blurb kullanarak yazı ve görüntü elde edebilirsiniz. :)

PHP, muhtemelen o zaman muhtemelen yapmak kolay bir şey değil html, ayrıştırmak gerekir (muhtemelen CURL veya benzeri kullanarak) sayfasını GET isteyeceksiniz, ama yardım için orada kütüphaneler vardır tahmin ediyorum bu size.

Aşağıdaki kullanın

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

JQuery sitede böyle bir örnek vardır here

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

Düzenli ifade muhtemelen işe yaramaz, ancak kullanabileceğiniz bir örnek veya yön var, sadece onunla oynamak :)

PHP sunucu-tarafı, jQuery yüzden gerçekten elde etmek istediğiniz şeye bağlıdır istemci tarafı. Ayrıca bu çünkü (kendi sunucusu üzerinden ama vekil olabilir) same-origin policy, genellikle zaten javascript ile başka bir etki bir Ajax isteği gerçekleştiremiyor dikkat

jQuery bir kenara, burada verdiğiniz durum için çalışacak PHP bunu yapmak için basit bir şekilde, bu

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

Yapar 's' değiştirici, unutmayın. satırsonu maç, ve. *? yapar deyim, sadece bir sonraki </div> yiyor, böylece olmayan açgözlü iç kısmı uyan

Bu durum için çalışır, ancak regexes genellikle bu görev için hasta uygundur. Bir DOmDocument içine HTML yüklemek ve bu şekilde erişebilir.

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