Jsoup实现网络数据抓取2

使用Jsoup工具解析数据,Jsoup采用的DOM进行解析数据的,总体是比较简单,根据各个元素的attr,class以及继承关系,就可以访问到需要的数据。

代码如下:

(1)SecondActivity代码

public class SecondActivity extends Activity
{
    List<DataHolder> dataHolders = new ArrayList<>();
    ListView listView;
    Adapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        init();
    }

    private void init()
    {
        Intent intent = getIntent();
        String date = intent.getStringExtra("extra_date");
        try
        {
            new AsynLoad().execute(new URL("http://rili.jin10.com/" + date));
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        Log.d("de" , dataHolders.toString());
    }

    class AsynLoad extends AsyncTask<URL , Void , String>
    {
        @Override
        protected String doInBackground(URL... urls)
        {
            StringBuilder sb = new StringBuilder();
            try
            {
                URL url = urls[0];
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5 * 1000);
                conn.setRequestMethod("GET");
                conn.setRequestProperty(
                        "Accept",
                        "image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
                                + "application/x-shockwave-flash, application/xaml+xml, "
                                + "application/vnd.ms-xpsdocument, application/x-ms-xbap, "
                                + "application/x-ms-application, application/vnd.ms-excel, "
                                + "application/vnd.ms-powerpoint, application/msword, */*");
                conn.setRequestProperty("Accept-Language", "zh-CN");
                conn.setRequestProperty("Charset", "UTF-8");
                conn.setRequestProperty("Connection", "Keep-Alive");
                InputStream is = conn.getInputStream();
                int len = 0;
                byte[] buf = new byte[1024];
                while ((len = is.read(buf)) > 0)
                {
                    sb.append(new String(buf , 0 , len , "UTF-8"));
                }

                is.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return sb.toString();
        }

        @Override protected void onPostExecute(String result)
        {
            Document doc = Jsoup.parse(result);
            Element importantTime = null;
            Elements td_rowspan = doc.getElementsByAttribute("rowspan");
            for (int i = 0 ; i < td_rowspan.size() ; i++)
            {
                if (td_rowspan.get(i).text().equals("22:30") || td_rowspan.get(i).text().equals("23:30"))
                {
                    importantTime = td_rowspan.get(i);
                }
            }

            if (importantTime != null)
            {
                Element parent = importantTime.parent();
                DataHolder dataHolder1 = new DataHolder();
                dataHolder1.setName(parent.child(2).text());
                dataHolder1.setLastData(parent.child(4).text());
                dataHolder1.setPreData(parent.child(5).text());
                dataHolder1.setPostData(parent.child(6).child(0).text());
                dataHolder1.setInfluent(parent.child(7).child(0).child(0).text() + " " + parent.child(7).child(0).child(1).text());
                dataHolders.add(dataHolder1);

                Element currentElement = parent.nextElementSibling();
                int count = 0;
                while (currentElement != null)
                {
                    if (count == 0 || count >3)
                    {
                        count++;
                        currentElement = currentElement.nextElementSibling();
                    }
                    else
                    {
                        DataHolder dataHolder = new DataHolder();
                        dataHolder.setName(currentElement.child(0).text());
                        dataHolder.setLastData(currentElement.child(2).text());
                        dataHolder.setPreData(currentElement.child(3).text());
                        dataHolder.setPostData(currentElement.child(4).child(0).text());
                        dataHolder.setInfluent(currentElement.child(5).child(0).child(0).text() + " "
                                + currentElement.child(5).child(0).child(1).text());
                        dataHolders.add(dataHolder);
                        currentElement = currentElement.nextElementSibling();
                        count++;
                    }
                }

                listView = (ListView) findViewById(R.id.id_list);
                adapter = new Adapter(SecondActivity.this , dataHolders);
                listView.setAdapter(adapter);
            }
        }
    }
}

(2)Bean类:

public class DataHolder
{
    private String name;
    private String lastData;
    private String preData;
    private String postData;
    private String influent;

    public DataHolder()
    {
    }

    public DataHolder(String name , String lastData , String preData , String postData , String influent)
    {
        this.name = name;
        this.lastData = lastData;
        this.preData = preData;
        this.postData = postData;
        this.influent = influent;
    }

    public String getName() {
        return name;
    }

    public String getPreData() {
        return preData;
    }

    public String getLastData() {
        return lastData;
    }

    public String getPostData() {
        return postData;
    }

    public String getInfluent() {
        return influent;
    }


    public void setName(String name) {
        this.name = name;
    }

    public void setLastData(String lastData) {
        this.lastData = lastData;
    }

    public void setPreData(String preData) {
        this.preData = preData;
    }

    public void setPostData(String postData) {
        this.postData = postData;
    }

    public void setInfluent(String influent) {
        this.influent = influent;
    }
}

(3)Adapter类:

public class Adapter extends BaseAdapter
{
    private List<DataHolder> datas;
    private LayoutInflater inflater;

    public Adapter(Context context , List<DataHolder> myDatas)
    {
        inflater = LayoutInflater.from(context);
        datas = myDatas;
    }

    @Override
    public int getCount()
    {
        return datas.size();
    }

    @Override
    public Object getItem(int position)
    {
        return datas.get(position);
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder viewHolder = null;
        if (convertView == null)
        {
            convertView = inflater.inflate(R.layout.list_item2 , null);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView) convertView.findViewById(R.id.name);
            viewHolder.lastData = (TextView) convertView.findViewById(R.id.last_data);
            viewHolder.preData = (TextView) convertView.findViewById(R.id.pre_data);
            viewHolder.postData = (TextView) convertView.findViewById(R.id.post_data);
            viewHolder.influent = (TextView) convertView.findViewById(R.id.info_data);
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.name.setText(datas.get(position).getName());
        viewHolder.lastData.setText("前值:" + datas.get(position).getLastData());
        viewHolder.preData.setText("预测值:" + datas.get(position).getPreData());
        viewHolder.postData.setText("公布值:" + datas.get(position).getPostData());
        viewHolder.influent.setText(datas.get(position).getInfluent());

        if (datas.get(position).getInfluent().equals("利空 金银"))
        {
            viewHolder.influent.setTextColor(Color.GREEN);
            viewHolder.influent.setBackgroundResource(R.drawable.text_style);
        }
        else
        {
            viewHolder.influent.setTextColor(Color.RED);
            viewHolder.influent.setBackgroundResource(R.drawable.text_style2);
        }


        return convertView;
    }

    class ViewHolder
    {
        TextView name;
        TextView lastData;
        TextView preData;
        TextView postData;
        TextView influent;
    }
}

主页面布局比较简单,这里只贴出item的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="60dp">

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="3dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:textSize="15sp"
        android:text=""/>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:layout_marginLeft="5dp"
        android:layout_below="@+id/name">

        <TextView
            android:id="@+id/last_data"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""
            android:textSize="12sp"/>

        <TextView
            android:id="@+id/pre_data"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""
            android:textSize="12sp"/>

        <TextView
            android:id="@+id/post_data"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:text=""
            android:textSize="12sp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:text="@string/info"
            android:textSize="12sp"/>

        <TextView
            android:id="@+id/info_data"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_marginLeft="3dp"
            android:layout_marginRight="3dp"
            android:text=""
            android:textColor="@android:color/holo_green_dark"
            android:background="@drawable/text_style"
            android:textSize="12sp"/>

    </LinearLayout>

</RelativeLayout>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值