jsoup+HttpURLConnection+多线程实现编写网络爬虫


jsoup  HttpURLConnection  多线程 网络爬虫  解析网页内容

开发平台:Android Studio 3.1

内容:

利用jsoup解析爬取的页面内容

HttpURLConnectionJava的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。

jsoup是一款JavaHTML解析器,可直接解析某个URL地址、HTML文本内容。


见代码:

show2Activity.java

package com.example.administrator.test1application;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.ArrayList;

public class show2Activity extends Activity {

    String path;
    Handler handler=new Handler();//Hanlder.post(Runnable对象)方法,将Runnable post到主线程中运行。
    TextView tv;

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

        tv=(TextView) findViewById(R.id.textView3);
        tv.setMovementMethod(ScrollingMovementMethod.getInstance());


        final ArrayList<String> list = new ArrayList<String>();
        list.add("http://www.wust.edu.cn/main.htm");
        list.add("http://120.wust.edu.cn/product.html");
        list.add("http://120.wust.edu.cn/product2.html");
        list.add("http://202.114.242.233:8045/type/0073011401.html");


        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                show2Activity.this,
                android.R.layout.simple_list_item_single_choice,
                list ); //Adapter数据填充器
        ListView li=(ListView)findViewById(R.id.listview);
        li.setAdapter(adapter);
        li.setChoiceMode(ListView.CHOICE_MODE_SINGLE); //单选

        li.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, final long id) {
                path=((TextView)view).getText().toString();
                new Thread(new Runnable() {
                    @Override
                    public void run() {

                        Document doc1 = null;
                        try {
                            //doc1 = Jsoup.connect("http://www.wust.edu.cn/main.htm").get();
                            doc1 = Jsoup.connect(path).get();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        final String title = "网页标题:     "+doc1.title(); //获取网页的标题
                        //final String s1= "头部:     "+doc1.head().toString();
                        final String s1= "头部:     "+doc1.head().text();//用.text()方法将网页head标签里的文本内容爬取下来
                       // final String body= "主体内容:    "+doc1.body().toString();
                        final String body= "主体内容:    "+doc1.body().text();
                        //final String s2="头部导航:     "+doc1.getElementById("headtop").text();

                        //final String s3 = "主体内容:   "+doc1.getElementsByClass("inner clearfix").text();


                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                tv.setText("结果:"+"\n"+"\n"+title+"\n"+"\n"+"\n"+"\n"+s1+"\n"+"\n"+body);
                            }
                        });
                    }


                }).start();




            }
        });






    }
}
activity_show2.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:orientation="horizontal">

        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="400dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:scrollbars="vertical"
        android:singleLine="false"
        android:text="TextView" />

</LinearLayout>
jsoup+HttpURLConnection+多线程实现编写网络爬虫


运行截图:

jsoup+HttpURLConnection+多线程实现编写网络爬虫


jsoup+HttpURLConnection+多线程实现编写网络爬虫


说明:listview列表可以上下拉动,内容多于长度可以显示的长度,记得引入jsoup的依赖包,直接在添加依赖包的地方搜索jsoup就可以搜出来,有点AS搜索不出来就直接在build.gradle(Module:app) 下面加上这句话:

implementation 'org.jsoup:jsoup:1.11.3'
如下图:(这个方法最实用,引入任何包都可以用这个方法)
jsoup+HttpURLConnection+多线程实现编写网络爬虫

然后,try again 或sync now就可以了。