【发布时间】:2018-09-29 14:52:51
【问题描述】:
我目前正在尝试使用 Jsoup 从 website 获取一些值,用于我的 android 应用程序。
基本上,我想提取这些值: 所以在代码中,模型名称应该转到 gpuModel 变量,价格转到 gpuPrice 等等,对于每一个图形卡。然后我会使用以下代码将它们存储在 firebase 中:
public void addToDatabase(String model, int price, int rating, double value,
double bench) {
Map<String, Object> docData = new HashMap<>();
docData.put("model", model);
docData.put("rating", rating);
docData.put("bench", bench);
docData.put("value", value);
docData.put("price", price);
db.collection("gpu").document(model).set(docData);
}
我目前正在尝试仅提取 gpu 型号名称以使其简单(最后我也想提取所有其他值),这是我当前的网络抓取代码:
public void webScrape(){
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
try {
Document doc = Jsoup.connect("https://www.videocardbenchmark.net/GPU_mega_page.html").get();
Elements gpus = doc.select("[id^=gpu]");
for (Element i : gpus) {
Elements gpuModel = i.select("tr td:nth-child(2)");
String gpuName = gpuModel.text().replace("/", "");
addToDatabase(gpuName, 12,12,12,12);
}
} catch (IOException e){
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
}).start();
按照我的逻辑,这应该选择所有 GPU,然后在 for 循环中,它只会提取卡的名称。将 gpuName 设置为提取的任何内容并将其推送到数据库。
但是,我在我的数据库中得到了这个:
它提取了 GPU 名称,还提取了所有其他不需要的字段(包括价格、价值、测试日期等)。
所以我的问题是,如何分别选择每个值?我在互联网上找到的所有示例都是通过一个非常简单的网站完成的,其中每个值都有自己的 ID,所以我无法真正向他们学习。
如果有什么我应该提供的,请告诉我。
我想要的简单代码表示:
Document doc = Jsoup.connect(the url).get();
Elements gpus = doc.select(all gpu);
for (each gpu in all gpus) {
gpuName = gpu.select(name);
gpuPrice = gpu.select(price);
gpuValue = gpu.select(value);
gpuPower = gpu.select(power);
addToDatabase(gpuName, gpuPrice, gpuPower, gpuValue);
}
【问题讨论】:
标签: android html css-selectors jsoup