【问题标题】:Fetching proper text from html tags using JSoup使用 JSoup 从 html 标签中获取正确的文本
【发布时间】:2019-07-21 23:23:22
【问题描述】:

我想从在线书店获取书名。不幸的是,它给我带来了这样的东西:

"title": "1 Jak mniej myśleć. Dla analizujących bez końca i wysoko wrażliwych"

我想去掉这个“1”,对于下一本书也是如此,因为下一本书会有 2、3、4 等......所以它应该与:

"title": "Jak mniej myśleć. Dla analizujących bez końca i wysoko wrażliwych"

我想知道是否可以使用 Jsoup 或者我只需要考虑 Java 代码。

这里是取这个标题的获取指令(我正在使用 for 循环,这就是它看起来像这样的原因)

document = Jsoup.connect(bestSellersEmpikURL).get();
List<Element> siteElements = document.select("div.productWrapper");
 for (int i = 0; i < 5; i++) {
           ....
            String title = siteElements.get(i).select("strong").first().text();
            ...
}

这里是网站:

<a href="/za-duzo-mysle-poradnik-dla-analizujacych-bez-konca-petitcollin-christel,p1222736270,ksiazka-p" class="img seoImage" title="Jak mniej myśleć. Dla analizujących bez końca i wysoko wrażliwych &nbsp;-&nbsp;Petitcollin Christel" rel="nofollow" data-product-id="p1222736270">
<img class="lazy" src="https://ecsmedia.pl/c/jak-mniej-myslec-dla-analizujacych-bez-konca-i-wysoko-wrazliwych-p-iext54318159.jpg" lazy-img="https://ecsmedia.pl/c/jak-mniej-myslec-dla-analizujacych-bez-konca-i-wysoko-wrazliwych-p-iext54318159.jpg" alt="">
</a>
    <div class="name">
<a href="/za-duzo-mysle-poradnik-dla-analizujacych-bez-konca-petitcollin-christel,p1222736270,ksiazka-p" class="seoTitle" title="Jak mniej myśleć. Dla analizujących bez końca i wysoko wrażliwych &nbsp;-&nbsp;Petitcollin Christel" data-product-id="p1222736270">
<strong class="ta-product-title"><span class="blue-number">1</span>
Jak mniej myśleć. Dla analizujących bez końca i wysoko wrażliwych
</strong>
</a>
<div class="smartAuthorWrapper ta-product-smartauthor">
<a href="/szukaj/produkt?author=petitcollin+christel" class="smartAuthor" title="Petitcollin Christel - wszystkie produkty">
Petitcollin Christel </a>
</div>
<div class="categoryAndRatings">
<div class="category">
<span>
<span class="productMainInfoSuffix ta-product-category">Książki</span>
|
<span class="productMainInfoSuffix ta-product-carrier">
okładka&nbsp;miękka
</span>
</span>
</div>
<div class="rating">
<ul class="ratingStars">
<li class="rate">
<i class="fa fa-fw fa-star"></i>
...

并链接https://www.empik.com/bestsellery/ksiazki

【问题讨论】:

  • 只需按照副本中的答案使用String#replaceAll(...),但对其进行修改,使其仅捕获并删除前导数字。
  • @HovercraftFullOfEels ye,但我在问是否有任何选项可以从 html 标签中获取标题
  • 将相关的 HTML 结构显示为问题中的代码格式文本,而不是链接。压缩它,这样我们就可以看到重要的事情。
  • @HovercraftFullOfEels 已编辑。所以它不是重复的,我没有要求在 Java 鳕鱼中这样做。
  • 请查看编辑以回答可能更好的选择器

标签: java jsoup


【解决方案1】:

那么你的问题可以通过简单的改变来解决

siteElements.get(i).select("strong").first().text();

siteElements.get(i).select("strong").first().ownText();

或更简单地说,将.text() 更改为.ownText()

这将显示元素自己的文本,而不是嵌套的元素文本。

例如,

document = Jsoup.connect(bestSellersEmpikURL).get();
List<Element> siteElements = document.select("strong.ta-product-title");
for (Element element : siteElements) {
    System.out.println(element.ownText());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2013-04-03
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多