12/08/2018, 12:17

Dùng Jsoup tìm giá sản phẩm trong 1 trang web

Việc tìm kiếm thông tin trong những trang web khác đôi khi xuất hiện trong chương trình của bạn, tìm giá của 1 sản phẩm cũng là một trong những phần việc đó. Tip nhỏ sau đây giúp bạn được phần nào việc tìm kiếm giá 1 sản phẩm trong 1 trang web, tuy vậy chưa phải áp dụng cho mọi trường hợp. Thử nhìn ...

Việc tìm kiếm thông tin trong những trang web khác đôi khi xuất hiện trong chương trình của bạn, tìm giá của 1 sản phẩm cũng là một trong những phần việc đó. Tip nhỏ sau đây giúp bạn được phần nào việc tìm kiếm giá 1 sản phẩm trong 1 trang web, tuy vậy chưa phải áp dụng cho mọi trường hợp. Thử nhìn vào 1 số trang web giới thiệu sản phẩm như: 01.jpg http://www.trananh.vn/dien-thoai/dien-thoai-di-dong/samsung-galaxy-grand-prime-ve-g531h-white-p189254c338 02.jpg http://pico.vn/29238/dien-thoai-di-dong-samsung-j500-vang--galaxy-j5.html 03.jpg http://www.apple.com/shop/buy-ipod/ipod-shuffle

Có một đặc điểm khá tương đồng trong source trang web là phần ghi giá các sản phẩm đều nằm trong các thẻ class với tên gọi gắn liền với từ price, và được ghi trên đầu.

Của trananh.vn:
    <a><img class="icon_price" src="/themes/images/billing.png" awidth="25" alt="Giá bán Samsung Galaxy Grand Prime VE G531H White" />Giá bán: 3,790,000</a>
Của pico.vn:
    <span class="price">4.988.000₫</span>
Của apple.com:
    <span class="current_price">$49.00</span>

Do vậy có thể tạo 1 class như sau (Việc sử dụng Jsoup có thể tham khảo ở http://jsoup.org/)

import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;

public class FindPrice {
    public static void main(String[] args) throws IOException {
    	String url = "http://pico.vn/29238/dien-thoai-di-dong-samsung-j500-vang--galaxy-j5.html";
        Document doc = Jsoup.connect(url).get();
        Elements a_contains = doc.select("[class*=price]");
	      for (Element a_contain : a_contains) {
	    	  String str = a_contain.text();
	    	  str = str.replaceAll("[^0-9.,]+", " ");
	    	  String[] arr = str.trim().split(" ");
	    	  if (arr.length > 0) {
	    		  System.out.println(arr[0]);
	    		  return;
	    	  }
		}
}

Chạy class trên ta được kết quả là: 3,790,000, đúng với giá trên trang web. Thực ra việc ở đây chỉ là tìm 1 thẻ có tên chứa string "price" đầu tiên và lấy ra phần ghi giá đầu tiên trong contain của element đó, việc tìm này đôi khi gặp sự cố đối với những trang web có cấu trúc phức tạp hơn, tuy vậy vẫn có thể thực hiện được bằng cách đưa thêm những cách so sánh khác sẽ được trình bày ở những phần tiếp theo. Cảm ơn bạn đã đọc và hi vọng bài viết sẽ giúp ích trong công việc của bạn.

0