我正在尝试使用JSOUP构建一个Web爬网程序。问题是,虽然它适用于其他页面,但它无法抓取Swiggy数据。我认为这是由于存在自定义标记restaurant-menu
。我这样做:
Document document = Jsoup.connect(url).get();
Elements document_body = document.select(".layout-wrapper");
System.out.println(document_body.html());
在输出中,我得到了这个:
<div class="restaurant-menu-container"> <restaurant-menu></restaurant-menu> </div>
restaurant-menu
标记为空,如果您访问网站并检查其内容,则整个数据会显示在restaurant-menu
标记中:
是由于自定义标签还是有其他原因?
答案 0 :(得分:0)
阅读restaurant-menu
的内容很简单:
document.select("div.restaurant-menu-container.restaurant-menu")
但是......当你使用JSoup时(就像浏览页面和查看源一样),你会发现没有内容。这是因为JSoup分析静态HTML内容,动态创建div.restaurant-menu-container.restaurant-menu
的内容。
JSoup无法解析动态内容,如果您想 - 以编程方式 - 提取动态内容,那么您可能需要查看Selenium之类的内容。
答案 1 :(得分:0)
这是一个tutorial,解释了如何使用StormCrawler + Selenium进行爬网。 SC使用引擎盖下的Jsoup来解析HTML文档,你可以编写基于XPath的提取规则,但也可以通过NavigationFilters动态地与页面交互。