E đang crawl dữ liệu từ site adidas nhưng bị 1 vấn đề là e thử request bằng Postman thì lấy dữ liệu rất ok nhưng khi chạy code trên máy hoặc server đều bị 500 error timeout do không qua được bảo mật của adidas thì phải Em cũng thử request bằng cách gọi javascript thì lỗi " Reason: CORS header 'Access-Control-Allow-Origin' missing" Mọi người cho e hỏi có cách nào để crawl nó không ạ? Em cảm ơn
Trang đấy mình có thấy gì đâu sao phải lấy cầu kỳ vậy.Test thử crawl một url với jsoup(không nhầm thì bác cũng biết java) mình thấy lấy bình thường
Ủa lạ nhỉ sao e request n cứ lỗi timeout hoài luôn sau đấy e có fix thì thêm user-agent vào thì request được sáng hôm sau thì lại timeout và bây giờ thì e đã thử mọi cách thì đều timeout duy chỉ có đúng 1 cách là dùng selenium mở trình duyệt lên request thì ok mà e đang muốn đưa tool lên chạy trên web nên k dùng selenium được
Time out thì tăng thời gian timeout lên,không thì đệ quy nó cho được thì thôi.Nếu lo thì đệ quy chục lần không thành công ghi lại url lỗi phân tích sau.Bác mở dịch vụ cho người khác à cho bản thân thì làm dễ thôi,bác không nói ngôn ngữ bác dùng nên khó đề nghị cụ thể được,em dùng jsoup thấy ok rồi.
E cũng tăng timeout lên r nhưng mà e tìm hiểu thì là do thằng adidas này n check bảo mật j thì phải bởi vì e thấy nếu request mà qua thì n lấy nhanh lắm còn k qua là cứ quay nằm im ( E lm tool trên déktop bằng java swing ok r nhưng mà đội nv nữ n ngu quá k cả cài lên mà sử dụng nữa nên là đnag tính lm trên web dùng python flask
Mình test mấy lần vẫn không thấy bảo mật chỗ nào Code: import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import nw.response.ResponseService; import org.jsoup.Connection; import org.jsoup.Jsoup; public class NewClass { public static void main(String[] args) { try { Connection.Response response = getResponse("https://www.adidas.com.vn/vi/superstar%20w/FV3396.html", new AtomicInteger(5)); System.out.println(response.parse().html()); } catch (IOException ex) { Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); } } public static Connection.Response getResponse(String url, AtomicInteger aiTrials) { try { Connection.Response response = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0") .followRedirects(false) .ignoreContentType(true) .followRedirects(true) .timeout(15000) .execute(); return response; } catch (IOException ex) { Logger.getLogger(ResponseService.class.getName()).log(Level.SEVERE, null, ex); responseCallback(url, aiTrials); } return null; } private static void responseCallback(String url, AtomicInteger aiTrials) { if (aiTrials != null && aiTrials.getAndDecrement() > 0) { getResponse(url, aiTrials); } } }
E test lại theo code bên trên của a thì thấy thêm cái ignoreContentType(true) và có set user agent vào thì code đã hoạt động được kb làm sao để thêm cái đấy ở python requests a nhỉ?
ServiceJava làm host hiếc có đắt không bạn,em thấy có thằng javafx hình như cũng có hỗ trợ trên nền tảng web đấy dùng nó dễ hơn nhiều
E cứ thuê server 5$ của Vultr r tự cài lên thôi nếu chạy thấy quá tải thì lại nâng cấp còn vụ javafx chắc phải tìm hiểu thêm chứ cái đấy e cũng k rõ lắm.
Javafx có khác gì swing đâu,code nó là java thường có thêm giao diện thôi.Theo em bác nên hướng luôn vào javafx vì nó đơn giản cũng dễ thiết kế,dễ hơn swing nhiều
Hix thế thì e cũng có tool đấy r tại là thằng java này khi sử dụng đưa cho bọn nv nữ bọn n kb cài jdk để chạy mà mình viết hướng dẫn bọn n đọc xong nói k hiểu trong khi mình có để hết các file r thế nên e ms phải chuyển hướng qua web để bọn n vào qua link r sử dụng cho dễ dàng
à ừm bạn có thể tham khảo ví dụ khi đưa javafx nên web từ thằng này https://www.jpro.one/?page=demos.Nó cũng cung cấp các mã để đưa dữ liệu dễ hơn.Mà nếu crawl dữ liệu lại đưa cho một đống người thế server bác chịu nổi không,nên nhớ vultr có giới hạn băng thông(nếu có giải pháp thì share với nhé)
E crawl theo cách là lưu lại vào db và và sp từ adidas cũng k nhiều lắm e còn tính kéo hết về up lên db với e cũng có khoảng hơn 20 người sử dụng thôi, e cũng lm 1 vài tool r thấy chưa có hiện tượng hết băng thông
Mình hiện tại làm là chỉ lưu mỗi md5 url vào database dùng để check trùng thôi.Còn dữ liệu mình lưu hết vào file mỗi dòng là một json nếu lớn quá sau 1m dòng có thể cắt file khác.Vì crawl dữ liệu nhiều lưu database sau này cần phải import rồi đọc nó khá lâu mà mất thời gian. Bác crawl dữ liệu theo kiểu em thì bác có hứng thú trao đổi dữ liệu ko
E chưa trao đổi dữ liệu bao giờ )) nên e cũng kb được nữa nếu a thích thì e có thể gửi cho a thôi vì e thấy dữ liệu từ adidas cũng k nhiều e lấy về để order hàng thôi cũng kb lm j nữa
Mình cũng chưa nhưng hiện giờ mình làm việc khác nên chưa crawl được.Adidas thì chả có ý tưởng gì hết.Chuyên mục chém gió không có tính kỹ thuật nữa em và bác nên chuyển qua inbox ạ