所以我无法弄清楚如何完全操纵我正在使用Jsoup进行抓取的数据。我知道如何定位这些区域,但我不知道如何单独定位它们但仍将它们组合在一起。
例如:
<div class="panel panel-default">
<div class="panel-heading">
<p> Heading1 </p>
</div>
<div class="panel-body">
<p> Body1 <p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<p> Heading2 </p>
</div>
<div class="panel-body">
<p> Body2 <p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<p> Heading3 </p>
</div>
<div class="panel-body">
<p> Body3 <p>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<p> Heading4 </p>
</div>
<div class="panel-body">
<p> Body4 <p>
</div>
我想在此HTML中定位不同的部分,然后以某种方式将它们放在textViews中。但是,当我尝试例如目标div.panel-heading&amp; div.panel-body我希望将标题放在正文上方,它将重复整个页面的所有div.panel标题,然后它将重复所有div.panel-bodys。它将它们打印在完全独立的组中,而不是一个在另一个上面。
以下是我正在使用的代码:
private void arbitrage() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
final StringBuilder builder2 = new StringBuilder();
try {
Document doc = Jsoup.connect("THE URL HERE").get();
Elements links = doc.select("div.panel.panel-default > div.panel-heading");
Elements links2 = doc.select("div.panel.panel-default > div.panel-body");
for (Element link : links) {
builder.append("\n").append(link.text());
builder2.append("\n").append(links2.text() + "\n");
}
} catch (IOException e) {
builder.append("Error : ").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
arbitrage.setText(builder.toString() + builder2.toString());
}
});
}
}).start();
}
== - = - = - = - = - = - EDITED = - = - = - = - = -
我更改了HTML代码,以更好地反映网址的外观。当我运行当前代码时,它会显示。
Heading1
Heading2
Heading3
Heading4
Body1
Body2
Body3
Body4
我希望它显示如下。
Heading1
Body1
Heading2
Body2
Heading3
Body3
Heading4
Body4
基本上,我想抓住面板标题&amp;单独的面板体,但将它们组合在一起。我可以通过选择div.panel.panel-default在一个组中抓取它们,但是我没有从UI的角度对它的显示方式进行过多的控制。至少我不知道如何操纵那些数据,当我把它们全部扫描出来时。
EDIT TWO = - = - = - = - = - = - = - = -
我越来越近了,这段代码让我可以更好地单独操作数据,但仍然无法满足我的需求。我想要标题和风格;身体让我们说不同的颜色。我无法弄清楚这一点。
for (Element panel : panels) {
Elements links = panel.select("div.panel-heading");
Elements links2 = panel.select("div.panel-body");
builder.append("\n").append(links.text()).append("\n").append("\n").append(links2.text())
.append("\n")
.append("\n");
}
将我的runOnUIThread更改为:
runOnUiThread(new Runnable() {
@Override
public void run() {
arbitrageTextView.setText(builder.toString());
}
});
但是如果我想要改变标题的文字颜色,那么我不能改变主体的颜色。或者在所有组之间添加分隔符,不允许我这样做。它在UI方面似乎非常有限,不允许我对它们进行样式化,只需将它们拉入并显示它们即可。我相信这是因为它将它全部放在一个textView下,我需要将它们放在两个不同的textView中吗?
答案 0 :(得分:0)
试试这个:
Elements panels = doc.select("div.panel.panel-default");
for (Element panel : panels) {
Elements links = panel.select("div.panel-heading");
Elements links2 = panel.select("div.panel-body");
builder.append("\n").append(links.text());
builder.append("\n").append(links2.text() + "\n");
}
<强>更新强> 我改变了代码