【问题标题】:Parsing Problems while Data Scraping数据抓取时的解析问题
【发布时间】:2016-04-03 13:27:50
【问题描述】:

认为我的解析有问题。我在 Android Studio 中使用 JSoup 和 Java。我试图从本地 html 文件中抓取数据并显示在我的应用程序上。但是当我运行应用程序时,我想要的数据不会出现。我想显示像“9:00”和“9:15”这样的时间。还有“声音”、“P2016”和“P.Mann”。 html 看起来像这样:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   <html xmlns='http://www.w3.org/1999/xhtml'>
    <head><title>timetable.html</title><meta http-equiv='content-  disposition', content='attachment;filename=timetable.html'>
    <meta http-equiv="Content-Type" content="application/octet-stream" />

   <style>body {background-color:white;} body,td { font-family: arial; }                     </style></head> 
   <data>
   <body>
   <table cellspacing='0' border='0' width='100%' >
  <col align='left' /><col align='center' /><col align='right' />
  </data>
  <tr>
  <td></td><td></td><td></td>
  </tr>
  </table>
  </td>
  </tr><tr>
  <td>
  <table cellspacing='0' border='0' width='100%' >
  <col align='left' /><col align='center' /><col align='right' />
  <tr>
  <td></td><td></td><td></td>
  </tr>
  </table>
  </td>
  </tr><tr>
  <td>
  <table cellspacing='0' border='0' width='100%' >
  <col align='left' /><col align='center' /><col align='right' />
  <tr>
  <td></td><td></td><td></td>
  </tr>
  </table>
  </td>
  </tr><tr>
  <td>
  <table cellspacing='0' border='0' width='100%' >
  <col align='left' /><col align='center' /><col align='right' />
  <tr>
  <td><table border='0' width='100%'>                                                                        <tr>  
  <td width='40%' align='left' valign='middle'><font face='arial' size='3'><b>The Year<font size='1'> </td><td    width='20%' align='center' valign='middle'><font face='arial' size='1'>ICOM</td><td width='40%' align='right' valign='middle'><font face='arial' size='2'><b>Weeks selected for output: 26 (22 Feb 2016-28 Feb 2016)</td></td><td></td><td></td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
   <table  cellspacing='0'  border='1'>
   <tr>
   <td></td>

   <td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>9:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>9:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>9:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>9:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>10:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>10:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>10:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>10:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>11:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>11:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>11:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>11:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>12:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>12:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>12:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>12:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>13:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>13:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>13:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>13:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>14:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>14:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>14:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>14:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>15:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>15:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>15:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>15:45</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>16:00</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>16:15</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>16:30</font></td>
<td   bgcolor='#C0C0C0' colspan='1'><font color='#FFFFFF'>16:45</font></td>
      </tr>
      <tr >
      <td style="border-bottom:3px solid #000000;" rowspan='1'   bgcolor='#C0C0C0'>  

    <font color='#FFFFFF'>Mon</font></td>
<td style="border-bottom:3px solid #000000;"  colspan='12' rowspan='1' >

    <table  cellspacing='0' border='0' width='100%'>
    <col align='left' />
    <tr>
    <td align='left'><font color='#FF0000'>Sound</font></td>
    </tr>
    </table>
    <table  cellspacing='0' border='0' width='100%'>
    <col align='left' />
    <col align='right' />
    <tr>
    <td align='left'><font color='#000000'>P2016</font></td>
    <td align='right'><font color='#008000'>P.Man</font></td>
    </tr>
    </table>
    <table  cellspacing='0' border='0' width='100%'>
    <col align='left' />
    <tr>
    <td align='left'><font color='#000080'>22-29, 32-36</font></td>
    </tr>
    </table>

    </td>
<td style="border-bottom:3px solid #000000;" >&nbsp;</td>
<td style="border-bottom:3px solid #000000;" >&nbsp;</td>
<td style="border-bottom:3px solid #000000;" >&nbsp;</td>
<td style="border-bottom:3px solid #000000;" >&nbsp;</td>
<td style="border-bottom:3px solid #000000;"  colspan='4' rowspan='1' >

这就是java的样子:

    import android.app.Activity;
    import android.os.Bundle;
    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;
    import android.widget.TextView;

 public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {

        File input = new File("C:\\Users\\user\\Desktop\\Mobile Newest\\JSoup\\app\\src\\main\\assets\\filename.html");
        Document doc = Jsoup.parse(input, "UTF-8");
        Elements tableElements = doc.select("td");
        TextView textView = (TextView)findViewById(R.id.text_view);
        for (Element td : tableElements) {
            textView.setText(td.text());
            System.out.println(td.text());
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

   }
 }

有人知道为什么它没有出现在屏幕上吗?

【问题讨论】:

    标签: java android android-studio web-scraping jsoup


    【解决方案1】:

    问题是,每次调用textView.setText(td.text()),textview都会被当前的td.text()替换,所以最后只能看到LAST td元素文本你的 html 文件,它本质上是一个空格

    【讨论】:

    • 那么我将其更改为什么以便打印我需要的内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多