我是Java的初学者,我正在尝试从一个网站中提取一些文本。但是,文本位于两个标记之间,当我使用getByXPath提取文本时,除了我需要的文本之外,我得到了所有东西。
这是我正在浏览的网站的布局:网站HTML布局
这两个突出显示的部分是我真正需要的文本片段。
这就是我目前掌握的密码:
List<HtmlElement> name = (List<HtmlElement>) page.getByXPath("//ul/li/a[@class='title']");
List<HtmlElement> subText = (List<HtmlElement>) page.getByXPath("//ul/li/p[@data-af=' (Secret)']");
然而,这就产生了两个清单:
名称-其中包含HtmlAnchor对象
[HtmlAnchor[<a class="title" data-af="10" href="/a180775/daddys-home-achievement">], HtmlAnchor[<a class="title" data-af="11" href="/a180776/protector-achievement">], HtmlAnchor[<a class="title" data-af="12" href="/a180777/sinclairs-solution-achievement">]]
subText --其中包含HtmlParagraph对象。
[HtmlParagraph[<p data-af=" (Secret)">], HtmlParagraph[<p data-af=" (Secret)">], HtmlParagraph[<p data-af=" (Secret)">], HtmlParagraph[<p data-af=" (Secret)">]]
如果您想查看整个网站:https://truesteamachievements.com/game/BioShock-2-Remastered/achievements
我需要这些清单看起来像这样:
["Daddy's Home", "Protector", "Sinclair's Solution"]
["Found your way back to the ruins of Rapture.", "Defended yourself against Lamb's assault in the train station.", "Joined forces with Sinclair in Ryan Amusements."]
这是我使用的Html库:https://htmlunit.sourceforge.io/apidocs/overview-summary.html
感谢你的帮助。
发布于 2022-05-20 11:05:50
最简单的方法是使用Stream:
List<HTMLElement> htmlElementList = new ArrayList<>();//get your list in needed way
List<String> listOfTitles = htmlElementList.stream()
.map(HTMLElement::getTitle)
.toList();
更多理解,使用foreach
循环:
List<HTMLElement> htmlElementList = new ArrayList<>();
List<String> listOfTitles = new ArrayList<>();
for (HTMLElement htmlElement:
htmlElementList) {
listOfTitles.add(htmlElement.getTitle());
}
不清楚-用于接收元素的库。如果您使用org.w3c.dom
库来定义HtmlElement
,这就是一个例子。否则-使用适当的文本接收方法(getTitle()
除外),例如getText()
-用于selenium WebElement
,等等.
https://stackoverflow.com/questions/72317015
复制相似问题