Scraping bằng PHP

Trang web: http://books.toscrape.com/index.html

Em đang cần lấy rating_stars. Sử dụng php và simple_html_dom.php

Mong mọi người giúp đỡ. Chi tiết càng tốt ạ.

Load HTML -> find element (product) -> loop -> find element (star)

Sau khi xem qua source trang bạn gửi thì mình thấy chỉ cần làm như vậy thôi.

  1. Load HTML: Tất nhiên, lúc nào cũng vậy.
  2. Find Products: Tìm tất cả các product có trong page HTML vừa load. Theo mình thấy thì mỗi product nằm trong thẻ article và class product_pod. Find nó ra thôi.
  3. Loop: Nhiều Product mà, cho vào loop để duyệt qua hết.
  4. Find Star: Trong mỗi product có thẻ <p> với class star-rating dùng dể display star. Ngoài class này ra thẻ <p> này còn có 1 class mang luôn giá trị trị của star Ví dụ: Three hay One. Chuyển nó thành number nếu bạn muốn thôi.

Bạn dùng simple_html_dom thì chắc đã biết cách dùng các method mà nó hỗ trợ, trong document cũng có nói nên mình không nói lại nhé. Chúc bạn thành công :wink:
Bạn nên bắt tay vào làm, gặp vấn đề thì research (tìm google thôi) bí thì lên đây hỏi. :sunny:

1 Like

Bài này có nhiều câu hỏi như lấy hình ảnh, lấy tên, giá… em đã làm được rồi.
Còn mỗi phần lấy star-rating em hơi bí.
Bước 4 em đã thử làm nhiều lần nhưng vẫn không lấy được ạ.
Bác chỉ cụ thể giúp em được không ạ?

// Đoạn trên này get HTML về
// ...
$html = str_get_html($response);

$products = $html->find('article.product_pod');

foreach ($products as $product) {
    var_dump($product->childNodes(1)->class);
}

Lúc chạy sẽ ra được kết quả nhau sau:

string(17) "star-rating Three"
string(15) "star-rating One"
string(15) "star-rating One"
string(16) "star-rating Four"
string(16) "star-rating Five"
string(15) "star-rating One"
string(16) "star-rating Four"
string(17) "star-rating Three"
string(16) "star-rating Four"
string(15) "star-rating One"
string(15) "star-rating Two"
string(16) "star-rating Four"
string(16) "star-rating Five"
string(16) "star-rating Five"
string(16) "star-rating Five"
string(17) "star-rating Three"
string(15) "star-rating One"
string(15) "star-rating One"
string(15) "star-rating Two"
string(15) "star-rating Two"

Đến đoạn này bạn lấy giá trị của star ra thôi :smiley:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?