jsoup 相关问题

Jsoup是一个Java HTML解析器,用于提取和操作HTML数据,使用最好的DOM,CSS和类似jQuery的方法。

如何避免围绕HTML和JSOUP PARSE中的头标签。

t ... 使用JSOUP,我尝试解析给定的HTML内容。 Jsoup.parse()之后,HTML输出将html,head和body标记附加到输入。我只想忽略这些。 样本输入: <p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> java代码: import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HTMLParse { public static void main(String args[]) throws IOException { try{ File input = new File("/ab.html"); String html = FileUtils.readFileToString(input, null); Document doc = Jsoup.parseBodyFragment(html); doc.outputSettings().prettyPrint(false); System.out.println(doc.html()); } catch(Exception e){ e.printStackTrace(); } } } 实际输出: <html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> </body></html> 指望输出: <p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> 如何阻止jsoup添加这些标签? 原因: parseBodyFragment()以及所有其他parse()方法都使用HTMLParser默认。这些添加了html-shell(<html>…</html>,<head>…</head>等)。 解决方案: 不使用HTML-parser,而是使用xml-parser ;--) Document doc = Jsoup.parse(html, "", Parser.xmlParser()); 取代单线和您的问题已解决。 示例: final String html = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>"; Document docHtml = Jsoup.parse(html); Document docXml = Jsoup.parse(html, "", Parser.xmlParser()); System.out.println("******* HTML *******\n" + docHtml); System.out.println(); System.out.println("******* XML *******\n" + docXml); 输出: ******* HTML ******* <html> <head></head> <body> <p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> </body> </html> ******* XML ******* <p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> 要获得预期的输出实际上是: final String html = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>"; Document doc = Jsoup.parseBodyFragment(html); doc.outputSettings().prettyPrint(false); System.out.println(doc.body().html()); 您可以尝试使用XML解析器,但这并不总是有效,因为HTML并非总是XML。它通常具有诸如<img>和<br>之类的未终止标签。最好坚持使用HTML解析器。您可以依靠存在<html>,<head>和<body>标签,它们很容易丢弃。只需通过选择身体标签并要求其HTML来获取HTML的片段。 Document doc = Jsoup.parseBodyFragment(html); doc.outputSettings().prettyPrint(false); System.out.println(doc.select("body").html()); 您可以与HTML解析器一起使用JSOUP.PARSE。您需要做的就是剥离html和body包装器。 可以通过选择body元素和unwrappingit:来完成此操作: String input = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>"; Node content = Jsoup.parse(input).body().unwrap(); System.out.println(content.html()); 通过body()您选择body元素,然后您删除身体,只保留内容。 输出为:unwrap()

回答 4 投票 0

divs divs div与jsoup

Any ideas? Source code: <span id="content"> <div class="status"> <div class="serviceName"> Some name <br /> http://blablaservice1 </div> <div class="serviceStatus-OK"> OK </div> </div> <div class="status"> <div class="serviceName"> Some other name <br /> http://blablaservice2 </div> <div class="serviceStatus-DOWN"> DOWN </div> </div> My code: Elements services = doc.select("span#conent"); Element content = doc.getElementById("content"); Elements servicesOks = content.getElementsByTag("status"); int upCounter = 0; int downCounter = 0; for (Element y : servicesOks) { if (y.hasClass("status-OK")) { upCounter++; } } for (Element y : servicesOks) { if (y.hasAttr("status-DOWN")) { downCounter++; } } System.out.println("OK Systems: " + upCounter); System.out.println("DOWN Systems: " + upCounter); My output is: OK Systems: 0 DOWN Systems: 0

回答 1 投票 0

如何从jsoup网站上获取视频或音频的URL? 我使用jsoup从此新闻网站解析所有HTML。 我可以通过选择所需的元素来获取所有标题和描述。但是我找不到要选择的视频URL元素。怎么会...

网站的所有HTML。 我可以通过选择所需的元素来获取所有标题和描述。但是我找不到要选择的视频URL元素。如何与JSOUP获取视频链接?

回答 1 投票 0

使用 Jsoup 解析巨大的 HTML 流

任何人都可以提供有关我如何解析非常大的 HTML 流/文件的指针或建议吗? 例如,我有一个大约有 270,000 行的表,我想将它带入我的应用程序中......

回答 2 投票 0

清理(清理)后返回无效链接

我正在从各种意图加载 URL(我有深层链接或 FCM 通知发送的链接),然后在 WebView 中打开它们。 我实现了 Jsoup 来保护我的应用程序免受 XSS 攻击。 实施...

回答 1 投票 0

我有一个 POST 请求代码,由于某种原因不起作用

发送了所有隐藏值,发送了正确的登录详细信息,发送了cookie,但它仍然不起作用。我看过一些教程,但我觉得给出的示例不太简单,而且我......

回答 1 投票 0

如何使用jsoup抓取动态网站?

我想用jsoup抓取一个网站。该网站是动态的,每秒左右更新一次。我很确定它使用了 jQuery,它更新了 HTML 中的一些 标签。我正在使用 jsou...

回答 3 投票 0

如何在网页中查找第一个图像或视频缩略图

如何在网页中查找第一个图像或视频缩略图。该代码检索图像,但它始终不是第一个可见图像,并且也无法正确获取视频缩略图。怎么做这个...

回答 1 投票 0

如何使用 JSoup Java 获取 Google 搜索的第一个标题和 URL?

我第一次使用 Jsoup,并尝试获取搜索查询的第一个 URL 和标题。代码运行时没有任何错误,但由于某种原因没有显示任何内容。我没有收到任何

回答 1 投票 0

使用 JSoup 评估 JavaScript

作为对 JSoup 调用的响应,我得到了这样的文档 作为对 JSoup 调用的响应,我收到了这样的文档 <body> <link rel="modulepreload" href="chunk-a.js"> <link rel="modulepreload" href="chunk-b.js"> <link rel="modulepreload" href="chunk-c.js"> </body 在浏览器中,Javascript 在运行时执行,我看到了有效的 HTML。有没有办法让 Jsoup 执行 Javascript,以便我看到 HTML 结果?预先感谢您的帮助 Jsoup 仅用于解析 HTML,这里你想要的是一个无头浏览器。如果您必须使用java来实现此目的,那么您的选择是: htmlunit(但 javascript 支持不是很好,如果页面有大量 js,则不会推荐它) Selenium(浏览器自动化,包括 Java 语言绑定)

回答 1 投票 0

如何使用 Jsoup 和 java 从该网站的按钮上抓取“85”?

tesco.com 的 html 请帮助我,我很困惑,很累,我只是觉得我已经精疲力尽了。我想从该页面中过滤掉 85,但我不知道该怎么做 字符串 url = "...

回答 1 投票 0

使用 __doPostBack 函数分析具有分页功能的 .aspx 站点

我想分析网页的一些数据,但问题是:该网站有更多页面被 __doPostBack 函数调用。 我怎样才能“模拟”进一步翻页并分析这个......

回答 3 投票 0

使用Jsoup时如何获取元素的LineNumber?

如: 文档 doc = Jsoup.parse(file,"UTF-8"); 元素 eles = doc.getElementsByTag("style"); 如何获取文件中 eles[0] 的行号?

回答 3 投票 0

使用 JSoup for Java 从网页中提取特定行

嗨,我想使用 JSoup 库从网站上抓取一些文本。我尝试了以下代码,这给了我整个网页,我只想提取特定行。这是代码...

回答 1 投票 0

自动登录/从网站抓取文件

我需要弄清楚如何抓取网站并从经过身份验证的网站下载文件。 一个脚本需要 使用用户名/密码登录该网站 浏览页面以获取...

回答 2 投票 0

为 Android 应用程序抓取此 HTML 的最佳方法是什么?

从网页中抓取以下 HTML 的最佳方法是什么? 我想取出 Apple、Orange 和 Grape,并将它们放入我的 Android 应用程序的下拉菜单中。 我应该使用 Jsoup 吗?如果...

回答 3 投票 0

我如何在groovy脚本中使用jsoup循环遍历div

我的要求是抓取数组中的所有评论数据,例如评论者姓名、日期和评论。我正在通过导入 Jsoup 在 groovy 脚本中的 mulesoft 中执行此操作。 使用下面的查询我可以获取...

回答 1 投票 0

Jsoup 未关闭标签问题

我有这个html,我想解析它 代码如下 乌诺 帮。博尼 4.1 ★ 18+<... 我有这个html,我想解析它 以下代码 <div class="info"> <strong>uno</strong> <p>gang . boni</p> <p>4.1 ★ <span>18+</span></p> </div> 这是我的代码 val ce= doc2.select("div [class='columns is-multiline'] p:eq(2)") println(ce) 它的输出是这样的 <p>4.1 ★ <span>18+</span></p> 但我希望输出仅为 4.1 如何做到这一点?我尝试先做,但它给了 同样的事情。 编辑: val ComboImageUrls: Elements = doc2.select("div [class='columns is-multiline'] img[src]") val p = doc2.select("div [class='columns is-multiline'] p:eq(2)").first() val ce: String = (p.childNode(0) as TextNode).text() ComboImageUrls.forEachIndexed { index, movieItem -> `is`++ val Final = ce println(Final) } 这是代码,其输出是这样的 3.7 ★ 3.7 ★ 3.7 ★ 3.7 ★ 3.7 ★ 这不是我想要的。我已经可以做到这一点,但这不是我想要的,因为它复制了结果,它应该给出不同的结果,例如 4.1 3.1 2.1 4.5 3.3 等等 如果我在循环中使用子字符串,它将简单地限制到第一个元素,并使循环无法正常运行。 有一种方法可以将节点文本与其内部元素分开: val cssQueryResult: Elements = Jsoup.parse(q).select("div p:eq(2)") val p: Element = cssQueryResult.first() val ce: String = (p.childNode(0) as TextNode).text() // will be equal to '4.1 ★ ' 进一步裁剪至“4.1”应通过纯 Kotlin 完成。 根据解析结果的差异,它可能是一些正则表达式或只是简单的ce.substringBeforeLast('★').trim()

回答 1 投票 0

基于自定义属性的JSoup抓取

所以我使用 JSoup 来抓取一个网站,该网站创建了一堆具有动态类名的 div(它们每次重新加载都会更改),但属性名称相同。例如: 所以我使用 JSoup 来抓取一个网站,该网站创建了一堆具有动态类名的 div(它们每次重新加载都会更改),但属性名称相同。例如: <div class="[random text here that changes] js_resultTile" data-listing-number="[some number]"> <div class="a12_regularTile js_rollover_container " itemscope itemtype="http://schema.org/Product" data-listing-number="[same number here]"> <a href... 我尝试了多种方法来选择这些 div 并将它们保存在元素中,但我似乎无法做到正确。我已经按属性尝试过: Document doc = Jsoup.connect([theUrl]).get(); Elements myEls = doc.select("div[data-listing-number]"); 我在课堂上尝试过: Document doc = Jsoup.connect([theUrl]).get(); Elements myEls = doc.getElementsByClass("a12_regularTile") 并且: Document doc = Jsoup.connect([theUrl]).get(); Elements myEls = doc.select("div[class*=js_resultTile]") 我尝试了另一种属性方法: Document doc = Jsoup.connect([theUrl]).get(); Elements myEls = new Elements(); for (Element element : doc.getAllElements() ) { for ( Attribute attribute : element.attributes() ) { if ( attribute.getKey().equalsIgnoreCase("data-listing-number")) { myEls.add(element); } } } 这些都不起作用。我可以选择获取所有 HTML 的文档,但我的 myEls 对象始终为空。我可以用什么来选择这些元素? 您确定这些元素存在于服务器返回的 HTML 中吗?它们可能稍后由 JavaScript 添加。如果页面呈现涉及JavaScript,那么您将无法使用Jsoup。更多详细信息,请参阅我对类似问题的回答:JSoup:难以提取单个元素 还有一个提示。您可以使用以下方法来代替 for-for-if 结构: for (Element element : doc.getAllElements()) { if (element.dataset().containsKey("listing-number")) { myEls.add(element); } }

回答 1 投票 0

通过电子表格导入 JSOUP 的 URL 以进行抓取

我终于让 IntelliJ 开始工作了。我正在使用下面的代码。它工作完美。我需要它一遍又一遍地循环,并从电子表格中提取链接,以便一遍又一遍地查找不同商品的价格...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.