【问题标题】:Jsoup Java get a specific tdJsoup Java 获取特定的 td
【发布时间】:2016-12-11 21:34:21
【问题描述】:

我有以下代码

import java.io.IOException;
import java.util.*;

import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
public class da {

/**
 * @param args
 */
public static void main(String[] args) {
    try {


            Document doc=Jsoup.connect("http://www.vremea.net/").get();
            Elements e=doc.select(".homeContent ul li a ");
            PrintStream ps=new PrintStream(new FileOutputStream("io"));
            String rezultat="";
            for(int i=0;i<e.size();i++)
                if(e.get(i).attr("href").contains("Arad"))
                    rezultat=e.get(i).attr("href");

            System.out.println(rezultat);

            Document doc1=Jsoup.connect(rezultat).get();
            Elements row=doc1.select(".tableforecast tr");
            Elements nume=doc1.select("h1");
            ArrayList<String> date=new ArrayList<String>();
            ArrayList<String> numedate=new ArrayList<String>();

            for(int q=1;q<nume.size();q++)
                if(nume.get(q).text().contains("Vremea in"))
                    numedate.add(nume.get(q).text());
            for(int i=0;i<row.size();i++)
                {
                    Elements col=row.get(i).select("td");
                    String sir="";
                    int vr=0;
                    for(int j=0;j<col.size();j++)
                    if(col.get(j).className().equals("cell large")) 
                        {sir=sir+" "+col.get(j).text();
                    vr=1;}
                    if(vr==1)
                    date.add(sir);

                }
        for(int i=0;i<numedate.size();i++){

            for(int j=0;j<date.size();j=j+2)
                ps.println(numedate.get(i)+"\n"+date.get(j)+"\n"+date.get(j+1));
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

 }

这段代码进入一个表格,每一行都有一个包含一些字符串的列。我想知道是否可以在不使用 contains 的情况下直接获取这些列并获取所有列,然后从所有这些列中获取我需要的内容,我想知道如果可能的话 select 会是什么样子?

numedate- 是日期的名称,date 是温度和小时。

【问题讨论】:

    标签: java html web-scraping jsoup html-table


    【解决方案1】:

    你可以这样试试:

    直接转到您要提取数据的页面(在您的情况下为“Arad”)

    http://www.vremea.net/Vremea-in-Arad-judetul-Arad/prognoza-meteo-pe-7-zile”查看其他页面。他们似乎有某种结构,如: /some text-in-place name-some text/some text

    可以直接选择class cell和class large中的td元素如下

    public static void main (String [] args) throws IOException{        
        Document doc = Jsoup.connect("http://www.vremea.net/Vremea-in-Arad-judetul-Arad/prognoza-meteo-pe-7-zile").get();
        Elements tds = doc.select("table.tableforecast tbody tr td.cell.large");
        for (Element e : tds){
            System.out.println(e.text());
        }
    }
    

    【讨论】:

    • 你为什么放 .单元格和大号之间?
    • 因为 td 属于“cell”和“large”两个类
    • 这里 20°C td 属于 3 类? (单元格、大号和 bb)
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多