01/10/2018, 16:16

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 ạ.

Vietlubu viết 18:18 ngày 01/10/2018

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
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.

Thanh Son viết 18:23 ngày 01/10/2018

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 ạ?

Vietlubu viết 18:27 ngày 01/10/2018
// Đ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

Bài liên quan
0