使用JSOUP的Web爬网程序无法获取自定义标记

时间:2017-11-22 11:56:13

标签: java web-crawler jsoup

我正在尝试使用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标记中:

是由于自定义标签还是有其他原因?

2 个答案:

答案 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动态地与页面交互。