Crawl data khi các topic trong web không đều nhau

Chào anh chị ! Em muốn crawl dữ liệu từ web bán hàng. Các topic ở trang chủ thì có cấu trúc giống nhau nên crawl được. Còn trong trang xem chi tiết sản phẩm thì có ảnh mô tả sản phẩm, có sản phẩm 5,6 ảnh có sản phẩm 2,3 ảnh. Vậy là làm lấy được hết ạ ? Mong mọi người cho em xin thuật toán để xử lý trường hợp này ! Cảm ơn

Thì bạn viết thêm function khác để crawl cái page đó.
Nếu có thêm những pages khác mà cấu trúc HTML nó khác khác khác nữa, thì viết thêm những functions khác khác khác nữa để crawl những cái khác khác khác khác đó.

3 Likes

Nếu đã crawl thành công các trang kia thì bạn sẽ nhận thấy căn cứ vào đâu để bóc tách được dữ liệu cần thiết (tên thẻ, id của element HTML hoặc đoạn text, hoặc là… gì gì đó khác). Từ lý thuyết này thì bạn cũng “nhìn vào yếu tố tương tự” để nhận diện các phần, các đối tượng cần bóc tách ở các trang có sản phẩm.

Cách làm thông thường đó là mở source HTML của các trang chi tiết sản phẩm ra đọc bằng mắt xem có nhận diện được phần nào với phần nào hay không. Nếu hoàn toàn không nhận diện được => không thể crawl vì người còn chưa hiểu làm sao chuyển tải cho đoạn code hiểu được.

Một khi đã nhận diện được rồi nhưng vẫn cảm thấy khó để diễn tả bằng code, thì bạn viết pseudo code lên đây để anh em trợ giúp.

Mình chia sẻ cách của mình thì bạn sẽ cảm thấy… không muốn thử: cho trình duyệt chạy nạp trang web lên hoàn chỉnh rồi convert nguyên trang thành hình ảnh. Sau đó thảy qua ứng dụng OCR để bóc tách dựa trên wireframe được nạp vào để hỗ trợ OCR định vị vùng nhanh hơn. Cách này khá chậm nhưng gần như chưa thất bại nếu trang web sử dụng kỹ thuật Ajax để nạp trang, thay đổi id, class HTML cũng không gây cản trở. Trang web chỉ gây trở ngại khi cố tình chơi ảnh nền rối mắt để khiến xử lý OCR bị nhiễu (các trang web bán hàng hiếm khi làm điều này).

5 Likes

dạ em đang làm project môn học, mà yêu cầu phải 100 sản phẩm, trong khi các bạn khác random thì em chọn cách crawl về. Em đã lưu được vào database rồi. chỉ thiếu phần mô tả và ảnh trong trang chi tiết sản phẩm vì nội dung không đều giữa các trang.
Cách em làm như sau :
Bước 1 : từ trang chủ crawl lấy tất cả link dẫn đến trang chi tiết sản phẩm.
Bước 2 : cho vòng for chạy trên list đó. mỗi trang chi tiết sản phẩm crawl tên, giá, cấu hình, sản phẩm, … mỗi lần ra text là lưu ngay vào database. ===> kết thúc vòng for thì database đã đầy sản phẩm.
trước em dùng HTMLAgilityPack nhưng giờ chuyển qua Jsoup của java.
em crawl trang https://fptshop.com.vn/dien-thoai/samsung-galaxy-a21s

Mong mọi người cho em xin mã giả hoặc thuật toán để làm tiếp ạ. Cảm ơn

Dạ cảm ơn anh đã tư vấn, em crawl trang này https://fptshop.com.vn/dien-thoai/samsung-galaxy-a21s các thông tin về tên, giá, hiệu, cấu hình em crawl về và lưu vào database được rồi, còn bài viết và ảnh mô ta em không biết crawl làm sao. Em dùng JSoup ạ

Mình không hiểu bạn “nhìn vào” yếu tố nào trên trang để bạn biết đó là tên, đó là giá? Nếu đã làm được điều đó thì tại sao bài viết lại không được, mình thấy khó hiểu.

Trích xuất ra là được chứ, hay là nó biến đi đâu?

Có bạn nào dân IT giải thích giúp cái này cho bạn kia với, mình bó tay vì không biết giải thích ra làm sao, chỉ biết là để lấy dữ liệu ra được thì phải căn cứ vào đặc điểm gì đó, giống như cần tìm một vật gì đó thì phải có mô tả đặc điểm: đội mũ xanh, đi dép vàng,… blah blah blah. Các element trong HTML thì cũng thế, nhìn vào id, class, tag hoặc selector gì đó để ra được cái cần trích ra.

2 Likes

@SITUVN.gcd @rogp10 @ThaoNguyen1 em cũng đang crawl dữ liệu từ web thegioididong đang bị lock ip thì dùng cách này có ổn không vậy anh chị ?

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