Trong bài tutorial Viết chương trình sử dụng Jsoup, chúng ta đã làm quen với các hàm chức năng của Jsoup và viết một chương trình để truy xuất dữ liệu, tổng hợp các đường link và các file ảnh của một trang web bất kỳ. Trong bài tutorial này chúng ta sẽ sử dụng Jsoup để tiến hành tìm kiến trên Google và lọc các dữ liệu trả về.

Để kết nối jsoup với Google search ta cũng sử dụng hàm Jsoup.connect(url).get(). Tuy nhiên ta thiết lập thêm thông số User Agent bằng cách sử dụng hàm .userAgent() (các bạn có thể kiểm tra User Agent của mình bằng cách truy cập trang What is my User Agent? . Trong trường hợp nếu ta không thiết lập User Agent thì Jsoup sẽ sử dụng Java version là giá trị mặc định của User Agent String ).

Trong bài tutorial này, chúng ta sẽ viết hàm googleSearch(String searchKey, int numOfResult, String dateRange, int sort) để thực hiện chức năng tìm kiếm và trả về kết quả của Google. Tương tư như khi ta tìm kiếm thông thường, Google trả về kết quả ứng với từng keyword cụ thể là danh sách các trang web chứa thông tin liên quan đến keyword đó. Ở đây ta sẽ lưu kết quả trả về theo ba trường thông tin:

– Title: là tên của trang web

– Url: là đường link tới trang web

– Summary: là phần tóm tắt nội dung mà Google hiện thị trong kết quả trả về.

Để thuận tiện cho việc truy xuất các trường thông tin này, ta sẽ tạo một SearchResult Class mà mỗi SearchResult object lưu trữ thông tin của một trang web trong kết quả Google trả về.

Hàm googleSearch() ở trên có bốn tham số đầu vào là:

– searchKey: là keyword mà ta cần tìm kiếm thông tin liên quan

– numOfResult: là số lượng kết quả mà Google sẽ trả về

– sort: sắp xếp kết quả trả về theo thứ tự thời gian (sort =1) hoặc theo mức độ liên quan (sort=0)

– dateRange: là khoảng thời gian mà ta muốn thu hẹp phạm vi tìm kiếm. Ở đây ta sử dụng tham số thời gian tbs như sau:

Value Result
tbs=qdr:s Past second
tbs=qdr:n Past minute
tbs=qdr:h Past hour
tbs=qdr:h10 Past 10 hours
tbs=qdr:d Past day
tbs=qdr:w Past week
tbs=qdr:m Past month
tbs=qdr:y Past year
tbs=cdr:1,cd_min:12/8/2016,cd_max:6/5/2018 From Dec 8,2016 to Jun 5,2018
tbs=qdr:a Anytime
tbs=sbd:1 Sort by date
tbs=sbd:0 Sort by relevance
tbs=sbd:1,qdr:m Past month and Sort by date
tbs=sbd:0,qdr:m Past month and Sort by relevance

Để bóc tách và lưu kết quả theo 3 trường thông tin, ta thực hiện tương tự như trong bài tutorial Viết chương trình sử dụng Jsoup. Với search keyword là BigData, ta thấy các kết quả đều nằm trong class=”g”.

Trong “g” class này thì title của trang web nằm trong thẻ “h3”, còn url nằm trong thẻ “a” với attribute là “href” và nội dung tóm tắt của trang Web nằm trong “st” class

Ngoài hàm googleSearch(String searchKey,int numOfResult, String dateRange, int sort) ở trên, ta tạo thêm hai hàm là googleSearch(String searchKey) và googleSearch(String searchKey,int numOfResult) để cho phép người dùng chỉ cần điền tham số đầu vào là searchKey hoặc (searchKey, numOfResult) (Lưu ý: đối với các ngôn ngữ khác hỗ trợ việc thiết lập giá trị mặc định của tham số đầu vào như Scala, C++ thì ta chỉ cần tạo một hàm duy nhất rồi thiết lập giá trị mặc định. Ví dụ như: googleSearch(String searchKey,int numOfResult=10, String dateRange=”a”, int sort=0). Tuy nhiên do Java không hỗ trợ việc thiết lập giá trị mặc định này nên ta sử dụng phương pháp Overloaded method.)

 

Ta sử dụng các hàm googleSearch() để chạy thử một số tìm kiếm với keyword là “Big data” như sau:

– Hiện thị 5 kết quả trong 1 tuần vừa qua và sắp xếp kết quả theo thứ tự liên quan:

– Hiện thị 5 kết quả trong 1 tuần vừa qua và sắp xếp kết quả theo thứ tự thời gian ( kết quả trong trường hợp này sẽ khác với kết quả ở trên dù ta cùng sử dụng chung keyword=”Big data” ):

– Sử dụng googleSearch(String searchKey,int numOfResult) để hiện thị top 5 kết quả (không giới hạn thời gian)

– Sử dụng googleSearch(String searchKey) để hiện thị các kết quả tìm kiếm với mặc định số lượng kết quả là 10.

Như vậy ta đã hoàn thành chương trình sử dụng Jsoup để tiến hành tìm kiếm trên Google và thiết lập các tham số khác nhau để tìm được kết quả mong muốn. Các bạn có thể tham khảo full code của chương trình dưới đây:

Tháng Mười Hai 25, 2018
ITechSeeker