Yêu cầu thg 10 3, 2018 6:00 SA 1699 0 3
  • 1699 0 3
0

C# HtmlAgilityPack không load full html

Chia sẻ
  • 1699 0 3
  • 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


Đã trả lời thg 10 5, 2018 1:57 SA
Đã được chấp nhận
+2

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:

https://stackoverflow.com/questions/45243042/htmlagilitypack-selenium-webdriver-returns-random-results

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

Chia sẻ
Avatar Chickencode @anonymousvn
thg 10 5, 2018 8:48 SA

Dạ, em cám ơn a.

Đã trả lời thg 10 3, 2018 10:11 SA
+1

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 😄

Chia sẻ
Đã trả lời thg 10 3, 2018 7:54 SA
0

bạn multi thread và asyn/await chưa

Chia sẻ
Avatar Chickencode @anonymousvn
thg 10 3, 2018 8:43 SA

Mình ko biết cái đó bạn ơi, có thể cho mình link tham khảo được không

thg 10 3, 2018 9:33 SA

@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# đó.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí