2017-12-14 130 views
6

Đây là mã của tôi:Làm cách nào để tìm thấy div này? (PHP Simple HTML DOM Parser)

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $title=$html->find('div#ires', 0)->innertext; 
    echo $title; 
?> 

Nó ra tất cả các kết quả của các trang tìm kiếm Google dưới tìm kiếm "BA236".

Vấn đề là tôi không cần tất cả chúng và thông tin tôi cần là bên trong một div không có id hoặc class hoặc bất cứ thứ gì khác.

Các div tôi cần là bên đầu tiên

<div class="g"> 

trên trang, vì vậy có lẽ tôi nên thử một cái gì đó như thế này:

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $title=$html->find('div[class=g], 0')->innertext; 
    echo $title; 
?> 

Nhưng vấn đề đó là, nếu tôi nạp trang đó hiển thị cho tôi không có gì ngoại trừ điều này:

Lưu ý: Đang cố gắng nhận thuộc tính không đối tượng trong C: \ xampp \ htdocs ... \ s impletest2.php trên dòng 4

Vậy làm cách nào tôi có thể nhận được div tôi đang tìm kiếm và tôi đang làm gì sai?

Edit:

Giải pháp:

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $e = $html->find("div[class=g]"); 
    echo $e[0]->innertext; 
?> 

Hoặc:

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $title=$html->find('div[class=g]')[0]->innertext; 
    echo $title; 
?> 

Trả lời

3

tôi đã thực hiện một sự thay đổi mã của bạn, nơi tôi đang tìm kiếm các lớp:

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $e = $html->find("div[class=g]"); 
echo $e[0]->innertext; 
?> 

kết quả:

British Airways Flight 236 

Scheduled departs in 13 hours 13 mins 

Departure DME 5:40 AM  — 

Moscow Dec 15  

Arrival LHR 6:55 AM  Terminal 5 

London Dec 15  

Scheduled departs in 1 day 13 hours 

Departure DME 5:40 AM  — 

Moscow Dec 16  

Arrival LHR 6:55 AM  Terminal 5 

London Dec 16  

Tôi nhìn cho các yếu tố div với class g sau đó tôi in số lượng của phần tử đầu tiên '0'

$e = $html-> find ("div [class = g]"); 
echo $e [0]->innertext; 

mã của bạn:

<?php 
    include('simple_html_dom.php'); 
    $html = file_get_html('http://www.google.com/search?q=BA236',false); 
    $title=$html->find('div[class=g]')[0]->innertext; 
    echo $title; 
?> 

không ('div[class=g], 0')

nhưng ('div[class=g]')[0]

+1

Sẽ hữu ích cho người khác nếu bạn thêm một số giải thích về những gì bạn đã làm để giải quyết vấn đề. –

+0

có, nhưng tại sao nó chỉ hoạt động theo cách này? Ý tôi là mã của tôi gần như giống nhau .. –

+0

Cảm ơn bạn đã giải thích! –

0

không có nhu cầu cho simple_html_dom đây, thật dễ dàng để làm với builtins DOMDocument và DOMXPath.

<?php 
$html = file_get_contents('http://www.google.com/search?q=BA236'); 
echo (new DOMXPath ((@DOMDocument::loadHTML ($html))))->query ('//div[@class="g"]')->item (0)->textContent; 

theo ý kiến ​​của tôi, DOMDocument + DOMXPath làm cho simple_html_dom.php khá vô nghĩa.trước đây 2 có thể làm khá nhiều thứ mà simple_html_dom có ​​thể làm, và được xây dựng trong các hàm php gốc, có khả năng được duy trì miễn là bản thân PHP được duy trì, và sau đó là dự án của bên thứ 3 có vẻ gần chết của nó (cam kết cuối cùng là vào năm 2014, chỉ có 1 cam kết trong tất cả năm 2014 và 2 cam kết trong tất cả năm 2013)

+0

có thể đúng nhưng đó hoàn toàn không phải là câu trả lời cho câu hỏi của tôi –

Các vấn đề liên quan