转载自android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)

转载自http://blog.csdn.net/sac761/article/details/48379173
android 开发--抓取网页解析网页内容的若干方法(网络爬虫)(正则表达式)
标签: android开发爬虫技术xml解析html解析
  836人阅读  评论(0)  收藏  举报
  分类:

网页有两种格式,一种是xml另一种是html,目前似乎好像大部分都是html格式的,查看网页格式的方法是在浏览器中右键-->查看源码

一,XML解析的三大方法

(1) SAX: Simple API for XML

SAX是一个解析速度快并且占用内存少的XML解析器。SAX解析XML文件采用的是事件驱动,也就是它并不需要解析完整个文档,
在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否符合XML语法中的某部分,如果符合则触发事件其实就是一些回调函数,
这些方法定义在ContentHandler

(2)DOM:Document Object Model

DOM解析是将XML文件全部载入,组成一颗dom树,然后通过节点以及节点之间的关系来解析XML文件。
对于特别大的文档,解析和加载整个文档可能很慢且很耗资源。

(3)pull

Pull是Android内置的xml解析器Pull解析器的运行方式与SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。


二,HTML解析的三大方法

(1)Jsoup

jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
这个方法很简便,但是成功率不大,不推荐。
(2)urlconnection
与httpclient相似,httpclient是增强版的urlconnection

(3)httpclient

HttpClient是一个很方便进行Http连接操作的工具包,用它可以设置代理和模拟浏览器下载网页。而HtmlParser则是一个开源的,可以对HTML进行处理的工具包,可以很方便的对HTML进行解析。


三,HttpClient源码讲解

本源码实现了抓取网页上的部分内容,并分栏显示出来,改进自laihuan99的博文Android抓取CSDN首页极客头条内容--网页数据抓取

MainActivity2.java

[java]  view plain  copy
  1. package com.example.webdatashow;  
  2.  //使用HttpClient组件访问网络以及获取 网页内容的方法。  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8. import java.util.regex.MatchResult;  
  9. import java.util.regex.Matcher;  
  10. import java.util.regex.Pattern;  
  11.    
  12. import org.apache.http.client.ClientProtocolException;  
  13. import org.apache.http.client.ResponseHandler;  
  14. import org.apache.http.client.methods.HttpGet;  
  15. import org.apache.http.impl.client.BasicResponseHandler;  
  16. import org.apache.http.impl.client.DefaultHttpClient;  
  17. import android.os.Bundle;  
  18. import android.os.Handler;  
  19. import android.os.Message;  
  20. import android.app.Activity;  
  21.   
  22. import android.view.View;  
  23. import android.view.View.OnClickListener;  
  24.   
  25. import android.widget.Button;  
  26. import android.widget.ListView;  
  27. import android.widget.SimpleAdapter;  
  28. import android.widget.TextView;  
  29. import android.widget.Toast;  
  30.   
  31. public class MainActivity2 extends Activity implements OnClickListener{  
  32.     ListView listview;  
  33.     private String TAG = "webdatashow";  
  34.     private Button jiazai;  
  35.     private TextView webDataShow;  
  36.     private String pediyUrl = "http://www.stdu.edu.cn/";     
  37.     Handler handler;   
  38.     List<Map<String, Object>> data;  
  39.        
  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.main);    
  44.         jiazai = (Button)findViewById(R.id.button1);  
  45.         webDataShow = (TextView)findViewById(R.id.webDataShow1);  
  46.         jiazai.setOnClickListener(this);      
  47.     }  
  48.    
  49.     @Override  
  50.     public void onClick(View view) {  
  51.             handler = getHandler();  
  52.             ThreadStart();  
  53.     }  
  54.       
  55.     /*httpClientWebData() 
  56.      * 返回值类型:String 
  57.      * 抓取网页的document 
  58.      *  
  59.      * */  
  60.     protected String httpClientWebData() {  
  61.         String content = null;  
  62.         DefaultHttpClient httpClinet = new DefaultHttpClient(); //创建一个HttpClient   
  63.         HttpGet httpGet = new HttpGet(pediyUrl);//创建一个GET请求   
  64.         ResponseHandler<String> responseHandler = new BasicResponseHandler();           
  65.             try {  
  66.                 content = httpClinet.execute(httpGet, responseHandler);  
  67.             } catch (ClientProtocolException e) {  
  68.                 e.printStackTrace();  
  69.             } catch (IOException e) {  
  70.                 e.printStackTrace();  
  71.             }//发送GET请求,并响应内容  
  72.             return content;     
  73.     }  
  74.       
  75.     /*getDate() 
  76.      * 返回值类型:List<Map<String, Object>> 
  77.      * 提取网页document的所需内容 
  78.      *  
  79.      * */  
  80.     private List<Map<String, Object>> getDate() {  
  81.         String httpstring = httpClientWebData();  
  82.         List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();  
  83.         Pattern p = Pattern.compile("latestnewsnews  |  </span>\\s*<span style="white-space:pre"> </span><a href=\"(.*?)\" title=\"(.*?)\"");//正则表达式  
  84.         Matcher m = p.matcher(httpstring);  
  85.         while (m.find()) {  
  86.             MatchResult mr=m.toMatchResult();  
  87.             Map<String, Object> map = new HashMap<String, Object>();  
  88.             map.put("title", mr.group(1));  
  89.             map.put("url", mr.group(2));  
  90.             result.add(map);  
  91.         }  
  92.         return result;    
  93.     }  
  94.       
  95.       /*ThreadStart() 
  96.      * 开辟新线程 
  97.      *  
  98.      * */  
  99.     private void ThreadStart() {  
  100.         new Thread() {  
  101.             public void run() {  
  102.                 Message msg = new Message();  
  103.                 try {  
  104.                     data = getDate();  
  105.                     msg.what = data.size();  
  106.                 } catch (Exception e) {  
  107.                     e.printStackTrace();  
  108.                     msg.what = -1;  
  109.                 }  
  110.                 handler.sendMessage(msg);  
  111.             }  
  112.         }.start();  
  113.     }  
  114.     private Handler getHandler() {  
  115.         return new Handler(){  
  116.             public void handleMessage(Message msg) {  
  117.                 if (msg.what < 0) {  
  118.                     Toast.makeText(MainActivity2.this"数据获取失败", Toast.LENGTH_SHORT).show();  
  119.                 }else {  
  120.                     initListview();  
  121.                 }  
  122.             }  
  123.         };  
  124.     }  
  125.       
  126.       /*initListview() 
  127.      * 在listview中显示数据 
  128.      *  
  129.      * */  
  130.     private void initListview() {  
  131.         Toast.makeText(getApplicationContext(), "doing......", Toast.LENGTH_SHORT).show();   
  132.         ListView listView = (ListView) findViewById(R.id.listView1);      
  133.         listView.setAdapter(new SimpleAdapter(this,data , android.R.layout.simple_list_item_2,  
  134.                 new String[] { "title","href" }, new int[] {  
  135.                 android.R.id.text1,android.R.id.text2  
  136.         }));  
  137.   
  138.     }  
  139.   
  140. }  
main.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.    <TextView  
  7.        android:id="@+id/webDataShow1"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"   
  10.          android:text="" />  
  11.     <Button  
  12.         android:id="@+id/button1"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:text="加载" />  
  16.   
  17.     <ListView  
  18.         android:id="@+id/listView1"  
  19.         android:layout_width="fill_parent"  
  20.         android:layout_height="wrap_content" >  
  21.     </ListView>  
  22.       
  23.    
  24.   
  25. </LinearLayout>  

manifest.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.example.webdatashow"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="18" />  
  10. <uses-permission android:name="android.permission.INTERNET" />  
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="com.example.webdatashow.MainActivity2"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.         </activity>  
  25.     </application>  
  26.   
  27. </manifest>  


最后写一点关于正则表达式的写法:

需要下载一个工具:RegexTester.exe下载

比如提取这一段源码中的新闻标题

[html]  view plain  copy
  1.  </div>  
  2.           <div class="contentarea">     
  3.               
  4.              <div id="news">  
  5.                             <div id="news_1">  
  6.                         <div class="moduletablenews">  
  7.                     <h3>学校新闻</h3>  
  8.                       
  9. <div class="newnotice"><div>今日共<a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33.html"><font color="red">0</font></a>信息更新</div></div><ul class="feednews-ul">  
  10.     <li class="latestnewsnews">  
  11.     <span id="date">09-10  |  </span>  
  12.     <a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33/21883-2015-09-10-03-51-32.html" title="我校召开第三十一个教师节庆祝表彰大会" target="_blank">  
  13.             我校召开第三十一个教师节庆祝表彰大会      
  14.     </a></li>  
  15.     <li class="latestnewsnews">  
  16.     <span id="date">09-09  |  </span>  
  17.     <a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33/21884-2015-09-10-07-09-14.html" title="重传承、勇创新:四方学院圆满完成迎新工作" target="_blank">  
  18.             重传承、勇创新:四方学院圆满完成迎...      
  19.     </a></li>  
  20.     <li class="latestnewsnews">  
  21.     <span id="date">09-07  |  </span>  
  22.     <a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33/21844-2015-09-07-10-10-04.html" title="交通学院:同忆抗战史,共筑中国梦" target="_blank">  
  23.             交通学院:同忆抗战史,共筑中国梦      
  24.     </a></li>  
  25.     <li class="latestnewsnews">  
  26.     <span id="date">09-06  |  </span>  
  27.     <a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33/21834-2015-09-06-08-16-17.html" title="欧洲科学院院士张传增教授来校做学术报告" target="_blank">  
  28.             欧洲科学院院士张传增教授来校做学术报告      
  29.     </a></li>  
共同的格式是这样的:

[html]  view plain  copy
  1. <li class="latestnewsnews">  
  2.     <span id="date">09-10  |  </span>  
  3.     <a href="http://xcb.stdu.edu.cn/2009-05-05-02-26-33/21883-2015-09-10-03-51-32.html" title="我校召开第三十一个教师节庆祝表彰大会" target="_blank">  
  4.             我校召开第三十一个教师节庆祝表彰大会      
  5.     </a></li>  
用(.*?)代替所需要的内容,于是在RegexTester.exe中输入下式能通过。(\2表示与第二个所需内容重复)

[html]  view plain  copy
  1. class="latestnewsnews">  
  2.     <span id="date">09-10  |  </span>  
  3.     <a href="(.*?)" title="(.*?)" target="_blank">  
  4.             \2   
继续精简去掉无用的:通过
[html]  view plain  copy
  1. latestnewsnews  <span>  |  </span>  
  2.     <a href=\"(.*?)\" title=\"(.*?)\" target=\"_blank\">  
  3.             \2   
再多试试去掉其它的杂草:

[html]  view plain  copy
  1. latestnewsnews    |  </span>  
  2.     <a href="(.*?)" title="(.*?)"  
最后用\\s代替换行,并在每个"前加\

[html]  view plain  copy
  1. latestnewsnews  |  </span>\\s*<span style="white-space:pre">  </span><a href=\"(.*?)\" title=\"(.*?)\"  
这就是最好的形态,

说明一下,不好的正则表达式会严重地影响匹配时间从而影响你app的运行速度,要反复研究出最好的正则表达式以便让你的app更流畅。



====================================================================================

jsoup的强大之处在这里就不多说,最近在写项目,需要爬取网页上的内容,自然想到的是利用Jsoup来处理,项目中是利用Jsoup爬取学校信息门户的新闻消息,然后放进客户端

网页的html代码如下

?
1
<span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" > 8 </span><span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" >月 30 日,日照市常务副市长王斌一行人来我校进行调研。校长戚万学,副校长康淑敏、杨冰等热情接待了王斌一行。校区管理办公室、学生工作办公室等相关负责人参加了座谈。</span><p></p><p style= "LINE-HEIGHT: 150%; TEXT-INDENT: 32px" ><span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" >王斌表示,曲阜师范大学有深厚的文化与学术底蕴,形成了独具特色的办学传统与学科优势,为服务日照、校地合作积极创造条件,建立校地资源共享、共同合作的良性渠道,为日照市社会发展做出了重要贡献,为日照市文化经济发展提供了支持,实现了社会建设的人才保障。</span></p><p style= "LINE-HEIGHT: 150%; TEXT-INDENT: 32px" ><span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" >戚万学对日照市委市政府给予的支持和帮助表示了感谢,并表明我校将进一步提高办学层次、加强人才培养,大力促进校地、校企合作,为日照市输送更多的优秀人才,实现学校建设与社会发展的共赢。我们将本着资源共享、互惠共赢的原则,以项目(课题)为纽带、整合学科资源、发挥人才优势与日照市加强合作和交流,为新丝绸之路经济带建设与发展做出贡献。</span></p><p style= "LINE-HEIGHT: 150%; TEXT-INDENT: 32px" ><span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" >(</span><span style= "LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; FONT-SIZE: 16px" >作者:李艳梅  来源:校区管理办公室  编辑:校区管理办公室  责编:孙琪)</span></p><p></p>
项目中,需要爬取出新闻中的图片超链接,还有新闻文字内容,功能代码如下,、由于每个新闻中图片的超链接数目不一定一样,防止java向外抛异常,需要自己try-catch处理

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private static void getItemContent() {
         // TODO Auto-generated method stub
         Document doc ;
         
         try {
             
             Elements listClass = doc.getElementsByAttributeValue( "class" , "zw_content" );
             String url2;
             for (Element listItem : listClass){
                 String url1 = listItem.getElementsByTag( "img" ).get( 0 ).attr( "src" );
                 try {
                     url2= listItem.getElementsByTag( "img" ).get( 1 ).attr( "src" );
                 } catch (Exception e){
                     url2= "1111" ;
                 }
                 
                 String text = listItem.getElementsByTag( "span" ).text();
                 System.out.println(text);
                 System.out.println(url1);
                 System.out.println(url2);
                         
             }
             
             
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }

爬取到的内容如下

 

8 月30日,日照市常务副市长王斌一行人来我校进行调研。校长戚万学,副校长康淑敏、杨冰等热情接待了王斌一行。校区管理办公室、学生工作办公室等相关负责人参加了座谈。 王斌表示,曲阜师范大学有深厚的文化与学术底蕴,形成了独具特色的办学传统与学科优势,为服务日照、校地合作积极创造条件,建立校地资源共享、共同合作的良性渠道,为日照市社会发展做出了重要贡献,为日照市文化经济发展提供了支持,实现了社会建设的人才保障。 戚万学对日照市委市政府给予的支持和帮助表示了感谢,并表明我校将进一步提高办学层次、加强人才培养,大力促进校地、校企合作,为日照市输送更多的优秀人才,实现学校建设与社会发展的共赢。我们将本着资源共享、互惠共赢的原则,以项目(课题)为纽带、整合学科资源、发挥人才优势与日照市加强合作和交流,为新丝绸之路经济带建设与发展做出贡献。 ( 作者:李艳梅? 来源:校区管理办公室? 编辑:校区管理办公室? 责编:孙琪)
/uploadfile/2016/0905/20160905095553545.jpg //第一个图片的超链接
1111 //如果没有第二个图片,侧打印自定义的URl

同样需要爬取到html代码中的新闻标题,图片超链接,由于图片的超链接跟标题跟文章内容的url不在一个标签下,所以在Elements节点需要向上抽取一层,在内层分别做不同的处理

java代码如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private static void getContent() {
         // TODO Auto-generated method stub
         
         
         
         Document doc;
         
         try {
             doc=Jsoup.connect( "http://www.qfnu.edu.cn/" ).get();
             
             Elements listClass = doc.getElementsByAttributeValue( "class" , "news-1-lists" );
             
             for (Element listElement : listClass){
                 
                 Elements listName = listElement.getElementsByTag( "li" );
                 
                 for (Element element : listName){
                     
                     //img标签下的数据
                     String title =element.getElementsByTag( "img" ).attr( "title" );                   
                     String url =element.getElementsByTag( "img" ).attr( "src" );
                     
                     //文章链接在a标签下,需要单独处理
                     String content = element.getElementsByTag( "a" ).attr( "href" );
                     System.out.println(title+ "http://www.qfnu.edu.cn" +url+ "文章地址" +content);
                 }
                 
             }
//          System.out.println(listClass);
         } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         
     }


 

爬取的结果如下

我校在山东高校思政课讲课大赛中斩获佳绩http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095553241.jpg文章地址http://blog.csdn.net/html/xxyw/2016/09/02/4648a396-c778-4116-ae79-6e61039ad9a3.html
日照市常务副市长王斌一行来我校调研http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095553545.jpg文章地址http://blog.csdn.net/html/xxyw/2016/09/02/d6f4656a-7349-4632-8634-27d30daaf3ad.html
我校与济宁高新区签署共建大学生创业孵化基地协议http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554664.jpg文章地址http://blog.csdn.net/html/xxyw/2016/09/01/b457fe77-7bdc-4430-a7a2-d58e4c1101bf.html
学校对科研实验室安全检查工作做出部署http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554660.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/31/a0ead4f5-79fe-4e7c-bdf7-4fef9336de30.html
学校领导深入各单位检查新学期开学工作http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554357.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/30/d77063c3-8c70-4386-be04-4cb806856332.html
我校在全国高等院校健身气功赛中获佳绩http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554406.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/30/056dfcb5-ca75-495e-a103-fe426f0a9ff4.html
校长戚万学会见新西兰客人http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554528.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/30/aa9a0b89-2487-4a8b-ae18-bae1b54facae.html
我校学生在全国大学生物理教学技能展示中获骄人成绩http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554175.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/29/4698415f-0656-42de-a2d5-3e339f721840.html
2016年算子代数研讨会召开http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554399.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/29/e378f047-0a90-4a4b-87f1-0154adfdbf62.html
我校2016年暑期干部学习班成功举行http://www.qfnu.edu.cn/uploadfile/2016/0905/20160905095554314.jpg文章地址http://blog.csdn.net/html/xxyw/2016/08/28/95986304-7e98-4f5c-942b-30d551f5d4b2.html

====================================================================================

100作者 lieco 2015.12.31 14:32
写了9848字,被4人关注,获得了10个喜欢

Android自由开发者 通过Jsoup抓取网页数据

字数901  阅读1350  评论1 

      现在网上流行了一种自由开发者的风气;就是自己私下写一个简易的app上传到github上;可以以此项目作为开源;同时熟悉git操作;但是很多时候我们都需要一些数据来呈现在app中;如图片列表,如文字+图片列表;网上有很多开放式的api可以调用,如百度api、http://gank.io/api(干货集中营api);如果你现在想弄自己的一套数据,想把一些网站的数据整合过来使用,那就需要去抓取某些网页中的特定数据;

我们是通过Jsoup来抓取数据的;jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容;

关于Jsoup的介绍,请访问Jsoul的官网:http://jsoup.org/

关于Jsoup的jar包下载地址:http://jsoup.org/download

关于Jsoup的官网API文档查询:http://jsoup.org/apidocs/

这里:http://www.open-open.com/jsoup/

AndroidStudio中把jar包放入libs文件下;右键add as a libr...后就可以使用了;废话不多说,这里就是讲怎么通过Jsoup去抓取网页特定数据;

比如这里我们需要抓取泡在网上的日子中安卓开发里面文章的标题+图片+详情链接;



直接右键显示网页源码(或者F12);我们可以看到很多HTML+CSS标签等;


我们直接在里面快速找到我们需要的标题(如:Realm for Android快速入门教程、Android 6.0状态栏使用灰色文字和图标);之后我们需要分析是从什么节点开始才是一条数据;就好比数组[{},{}]一样;里面每个数据都是以什么开头的;这里我们分析之后可以看到是以<div class="archive-list-item">为节点就是一条数据;我们需要的详情连接是在<div class="archive-list-item">层下第一个标签<a href>中;图片地址是在第二个标签<img>中, 我们需要的标题是在<div class="post-intro">层下的子标签里面;

      我们所需要的东西已经找到;接下来我们去抓取出数据封装一下就可以用了;

代码如下:


可以看到先是通过Jsoup.connect(url).get();获取一个Document;这样我们就可以通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据;首先解析我们上面说的节点<div class="archive-list-item">会得到一个Elements 通过for循环;我们在循环中取我们需要的数据;看代码可以发现Elements的两个属性select和attr;select可以认为是提取<XXX这种标签;attr可以是认为提取XXX的内容;如:e.select("img").attr("src")) 就是提取标签img下面的src对应的内容;我们运行打印一下数据可以看到下面的结果:


可以看到我们需要的数据已经打印出来了;

接着我们就是接收跟封装数据了,毕竟我们习惯了后台服务器返回的那种json数据;接下来写一个简易的Bean类如下:


里面序列化的代码没截全;把上面代码改下改掉;顺便加上分页功能:


这样我们就能愉快地使用List<Object>数据了;

最后特此声明:用了泡在网上的日子的数据;



  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值