C# HtmlAgilityPack không load full html
- Chào mọi người, em đang dùng thu viện HtmlAgilityPack của c# để crawl data. tuy nhiên em gặp trường hợp là nó không load đủ data html. em đoán là do có thể 1 số cái nó load bằng JavaScript. có thể khắc phục vấn đề này không?
3 CÂU TRẢ LỜI
HTMLAgilityPack thì không thể nào tự động bắt các request ajax và nhìn thấy html trả về trong đó được. Do đó nếu em muốn lấy data của 1 trang được load động bằng ajax thì em phải chịu khó dùng chrome debugging tool (F12) sau đó vào tab Network, chọn XHR để xem khi trang web load data động bằng ajax thì nó gọi đến url nào. Sau đó em dùng chính url đó để đưa cho HTMLAgilityPack nó parse cho em thì em sẽ lấy được ruột html của trang ajax đó nhé.
Có một cách nữa đó là dùng kết hợp với Selenium (theo như các anh khác đã gợi ý bên trên). Em có thể tham khảo code ở đây:
Có một comment nữa gợi ý là Dùng WebRequest thì sẽ k gen đầy đủ ajax, nhưng nếu dùng WebBrowser control thì lại đợi và lấy đủ được html gen động từ ajax. Em thử xem nhé:
https://stackoverflow.com/questions/10169484/htmlagilitypack-and-dynamic-content-issue/21955972
Dạ, em cám ơn a.
Sở dĩ bạn không load đủ data có lẽ là do phần nội dung đó sử dụng ajax
để lấy dữ liệu từ server. Để giải quyết bài toán này, bạn có thể sử dụng Selenium
để giả lập quá trình chạy toàn bộ javascript từ phía code của mình, như khi nó được chạy trên trình duyệt vậy.
Bạn có thể tham khảo bài viết này https://viblo.asia/p/nodejs-dung-selenium-cheerio-de-crawl-du-lieu-4dbZNDGq5YM của tác giả @dinh.van.hoang xem sao. Mặc dù trong bài viết sử dụng nodejs
, nhưng nhìn chung phần sử dụng selenium
để giải quyết vấn đề thì chắc cũng phù hợp với bài toán của bạn
Mình ko biết cái đó bạn ơi, có thể cho mình link tham khảo được không
@anonymousvn =))) crawler data thì nên dùng cái đó để lấy được dữ liệu chứ. ko dùng thì chương trình sẽ bị crash. Nó là đa luồng và xử lý bất đồng bộ trong C# đó.