jsoup HttpURLConnection 多线程 网络爬虫 解析网页内容
开发平台:Android Studio 3.1
内容:
利用jsoup解析爬取的页面内容
HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。
jsoup是一款Java的HTML解析器,可直接解析某个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>
运行截图:
说明:listview列表可以上下拉动,内容多于长度可以显示的长度,记得引入jsoup的依赖包,直接在添加依赖包的地方搜索jsoup就可以搜出来,有点AS搜索不出来就直接在build.gradle(Module:app) 下面加上这句话:
implementation 'org.jsoup:jsoup:1.11.3'
如下图:(这个方法最实用,引入任何包都可以用这个方法)
然后,try again 或sync now就可以了。