Asked Oct 3rd, 2018 6:00 AM 653 0 3
  • 653 0 3
0

C# HtmlAgilityPack không load full html

Share
  • 653 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 ANSWERS


Answered Oct 5th, 2018 1:57 AM
Accepted
+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

Share
Chickenode @anonymousvn
Oct 5th, 2018 8:48 AM

Dạ, em cám ơn a.

0
| Reply
Share
Answered Oct 3rd, 2018 10:11 AM
+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 😄

Share
Answered Oct 3rd, 2018 7:54 AM
0

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

Share
Chickenode @anonymousvn
Oct 3rd, 2018 8:43 AM

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

0
| Reply
Share
Oct 3rd, 2018 9:33 AM

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

0
| Reply
Share