【发布时间】:2014-11-23 19:14:02
【问题描述】:
所以我正在尝试抓取几段 html(见下文)。 html 有一个重复的 div(这里:类数据)。我试图从这个类中获取名称,stat1 和 stat 2。所以我从:getElementsByClass 开始。但是我该如何从这里开始呢?如何分别获取 3 个元素?
这是我目前得到的,但我只是把所有的文字,而不是单独的 3 部分:
html.html
<html>
<div class='data'>
<a href='/url1'>
<div class='name'>name1</div>
<div class='stat'>123</div>
<div class='stat2'>456</div>
</a>
</div>
<div class='data'>
<a href='/url2'>
<div class='name'>name2</div>
<div class='stat'>123.1</div>
<div class='stat2'>456.2</div>
</a>
</div>
</html>
JsoupTesting.java
package JsoupTest;
import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupTesting {
public static void main(String[] args) throws IOException {
File input = new File("html.html"); //path to html.html
Document doc = Jsoup.parse(input, "UTF-8");
Elements contents = doc.getElementsByClass("data");
for (Element content : contents) {
String text = content.text();
System.out.println("name: " + text + "\n----");
}
}
}
结果:
name: name1 123 456
----
name: name2 123.1 456.2
----
我想要类似的东西:
name: name1
stat: 123
stat2: 456
----
name: name2
stat: 123.1
stat2: 456.2
----
【问题讨论】:
-
你不能像以前一样使用
getElementsByClass吗? -
是的,我每次都可以使用其他 getElementsByClass 抓取页面 3 次,但没有更好的解决方案吗?所以我只需要刮一次页面。
-
你不需要刮页面3次。在
for循环内,只需使用String name = content.getElementsByClass("name").first().html();、String stat = content.getElementsByClass("stat").first().html();、String stat2 = content.getElementsByClass("stat2").first().html();。 -
哇,成功了,非常感谢。
标签: java jsoup screen-scraping