正则表达式 qq新闻 内容抓取 正则表达

2016-07-28 12:41 出处: 人气: 

demo 如图:

正则表达式 qq新闻 内容抓取 正则表达


根据返回内容 进行正则匹配,获取 需要布局信息 QQNewsItemEntity 


正则表达式 qq新闻 内容抓取 正则表达


package com.curiousby.fitnessandappointment.utils; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.curiousby.fitnessandappointment.entity.QQNewsItemEntity; public class QQNewsMatcherPerformer { public static List<QQNewsItemEntity> parseHtmlData(String result) { List<QQNewsItemEntity> list = new ArrayList<QQNewsItemEntity>(); Pattern pattern = Pattern .compile("<a target=\"_blank\" class=\"pic\" href=\"([^\"]*)\"><img class=\"picto\" src=\"([^\"]*)\"></a><em class=\"f14 l24\"><a target=\"_blank\" class=\"linkto\" href=\"[^\"]*\">([^</a>]*)</a></em><p class=\"l22\">([^</p>]*)</p>"); Matcher matcher = pattern.matcher(result); while (matcher.find()) { QQNewsItemEntity model = new QQNewsItemEntity(); model.setNewsDetailUrl(matcher.group(1).trim()); model.setUrlImgAddress(matcher.group(2).trim()); model.setNewsTitle(matcher.group(3).trim()); model.setNewsSummary(matcher.group(4).trim()); list.add(model); } return list; } } package com.curiousby.fitnessandappointment.request.http; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONObject; import android.util.Log; import com.android.volley.Request.Method; import com.android.volley.NetworkResponse; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.curiousby.fitnessandappointment.MyApplication; import com.curiousby.fitnessandappointment.constants.Constants; import com.curiousby.fitnessandappointment.entity.FeedAllEntity; import com.curiousby.fitnessandappointment.entity.FeedCommentEntity; import com.curiousby.fitnessandappointment.entity.FeedZanEntity; import com.curiousby.fitnessandappointment.entity.QueryResultJson; import com.curiousby.fitnessandappointment.quote.volley.GsonRequest; import com.curiousby.fitnessandappointment.request.dbmanager.QQNewsHttpManager; import com.curiousby.fitnessandappointment.request.dbmanager.TrendHttpManager; import com.curiousby.fitnessandappointment.utils.JSONUtil; import com.curiousby.fitnessandappointment.utils.JsonParser; import com.google.gson.JsonElement; public class QQNewsHttpRequest { public static void getQQNewsDate(final int page){ String url = Constants.getQQNewsUrl(page); StringRequest request = new StringRequest(url, new Listener<String>() { @Override public void onResponse(String response) { if (page ==1 ) QQNewsHttpManager.getQQNewsByPageFirst(response); else QQNewsHttpManager.getQQNewsByPage(response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { QQNewsHttpManager.getQQNewsByPageError(); } }) /* { @Override protected Response<String> parseNetworkResponse( NetworkResponse response) { String str = null; try { str = new String(response.data,"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return Response.success(str, HttpHeaderParser.parseCacheHeaders(response)); } }*/ ; Volley.newRequestQueue(MyApplication.newInstance()).add(request); } } package com.curiousby.fitnessandappointment.activity; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import com.curiousby.fitnessandappointment.MyApplication; import com.curiousby.fitnessandappointment.R; import com.curiousby.fitnessandappointment.adpter.QQNewsAdapter; import com.curiousby.fitnessandappointment.constants.Constants; import com.curiousby.fitnessandappointment.entity.QQNewsItemEntity; import com.curiousby.fitnessandappointment.quote.xlistview.MsgListView; import com.curiousby.fitnessandappointment.quote.xlistview.MsgListView.IXListViewListener; import com.curiousby.fitnessandappointment.request.event.QQNewsStringHttpEvent; import com.curiousby.fitnessandappointment.request.event.base.RequestEvent; import com.curiousby.fitnessandappointment.request.http.QQNewsHttpRequest; import com.curiousby.fitnessandappointment.utils.QQNewsMatcherPerformer; import de.greenrobot.event.EventBus; public class QQNewsActivity extends BaseActivity implements IXListViewListener ,OnItemClickListener{ private MsgListView mListView; private List<QQNewsItemEntity> mDataList; private QQNewsAdapter mAdapter; private static int start = 1; private Context mContext; public final static String QQ_NEWS_DETAIL_URL = "qq_news_detail_url"; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.qqnews_list); this.mContext = QQNewsActivity.this; initUtils(); initView( ); initListeners(); EventBus.getDefault().register( this ); start =1; QQNewsHttpRequest.getQQNewsDate(start); } private void initUtils() { mDataList = new ArrayList<QQNewsItemEntity>(); mAdapter = new QQNewsAdapter(mContext); mAdapter.setmDataList(mDataList); } private void initView() { mListView = (MsgListView) this.findViewById(R.id.qq_news_list); mListView.setAdapter(mAdapter); } private void initListeners() { mListView.setPullLoadEnable(true); mListView.setPullRefreshEnable(true); mListView.setXListViewListener(this); mListView.setAdapter(mAdapter); mListView.setOnItemClickListener( this ); } @Override public void onRefresh() { start =1; mListView.setPullLoadEnable(true); mListView.setPullRefreshEnable(true); QQNewsHttpRequest.getQQNewsDate(start); } @Override public void onLoadMore() { start += 1; QQNewsHttpRequest.getQQNewsDate(start); } @Override public void onDestroy() { EventBus.getDefault().unregister( this ); super.onDestroy(); } public void onEventMainThread(RequestEvent requestEvent){ if(requestEvent instanceof QQNewsStringHttpEvent){ QQNewsStringHttpEvent event = (QQNewsStringHttpEvent) requestEvent; switch(event.status){ case HTTP_ERROR: mListView.stopRefresh(); mListView.stopLoadMore(); mListView.setPullLoadEnable(false); break; case HTTP_START: { mListView.stopRefresh(); mListView.stopLoadMore(); String result = event.data; mAdapter.clearMDataList(); List<QQNewsItemEntity> list = QQNewsMatcherPerformer.parseHtmlData(result); mAdapter.setmDataList(list); mAdapter.notifyDataSetChanged(); } break; case HTTP_SUCCESS: { mListView.stopRefresh(); mListView.stopLoadMore(); String result = event.data; List<QQNewsItemEntity> list = QQNewsMatcherPerformer.parseHtmlData(result); mAdapter.addMDataList(list); mAdapter.notifyDataSetChanged(); } break; default: break; } } } @Override public void onItemClick( AdapterView<?> parent, View view, int position, long id) { QQNewsItemEntity item = mAdapter.getItem(position - 1 ); if (item != null) { Intent msgIntent = new Intent(); Log.e("baoyou", Constants.url_qq_news_base + item.getNewsDetailUrl()); Bundle bundle = new Bundle(); // Bundle的底层是一个HashMap<String, Object bundle.putString(QQNewsActivity.QQ_NEWS_DETAIL_URL, item.getNewsDetailUrl() ); msgIntent.putExtra("bundle", bundle); msgIntent.setClass(MyApplication.newInstance(), QQNewsDetailActivity.class); startActivityForResult( msgIntent, 1000 ); } } } package com.curiousby.fitnessandappointment.activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.webkit.WebSettings; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebView; import android.webkit.WebViewClient; import com.curiousby.fitnessandappointment.R; import com.curiousby.fitnessandappointment.constants.Constants; public class QQNewsDetailActivity extends BaseActivity { private WebView webView; private String url ="https://www.baidu.com"; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.qqnews_list_item_detail); initUtils(); initView( ); initListeners(); } private void initListeners() { webView.loadUrl(url); showWaitingDialog(""); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); dismissWaitingDialog(); return true; } }); } private void initView() { webView = (WebView) this.findViewById(R.id.wv_qq_news_item_detail_webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //支持js //settings.setPluginsEnabled(true); //支持插件 settings.setUseWideViewPort(false); //将图片调整到适合webview的大小 settings.setSupportZoom(true); //支持缩放 settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); } private void initUtils() { Intent intent = getIntent(); Bundle bundle = intent.getBundleExtra("bundle"); String path =bundle.getString(QQNewsActivity.QQ_NEWS_DETAIL_URL); url = Constants.url_qq_news_base + path; } } package com.curiousby.fitnessandappointment.adpter; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.curiousby.fitnessandappointment.R; import com.curiousby.fitnessandappointment.entity.QQNewsItemEntity; import com.curiousby.fitnessandappointment.quote.volley.ImageCacheManager; public class QQNewsAdapter extends BaseAdapter{ private LayoutInflater mInflater; private List<QQNewsItemEntity> mDataList; private Context mContext; public QQNewsAdapter(Context mContext) { this.mContext = mContext; this.mInflater = LayoutInflater.from(mContext); } public List<QQNewsItemEntity> getmDataList() { return mDataList; } public void setmDataList(List<QQNewsItemEntity> mDataList) { if (this.mDataList == null ) { this.mDataList = new ArrayList<QQNewsItemEntity>(); } this.mDataList = mDataList; } public void addMDataList(List<QQNewsItemEntity> mDataList) { this.mDataList.addAll(mDataList); } public void clearMDataList( ) { this.mDataList.clear(); } @Override public int getCount() { if (mDataList != null && mDataList.size() > 0) return mDataList.size(); return 0; } @Override public QQNewsItemEntity getItem(int position) { if (mDataList != null && mDataList.size() > 0) return mDataList.get(position); return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if ( convertView == null || convertView.getTag() ==null ) { convertView = mInflater.inflate( R.layout.qqnews_list_item,parent, false); viewHolder = new ViewHolder(convertView); convertView.setTag( viewHolder ); }else{ viewHolder = ( ViewHolder ) convertView.getTag(); } QQNewsItemEntity qqnie = getItem(position); if (qqnie != null) { ImageCacheManager.loadImage(qqnie.getUrlImgAddress(),viewHolder.qqnewspic, getBitmapFromRes(R.drawable.ic_launcher), getBitmapFromRes(R.drawable.ic_launcher)); viewHolder.qqnewstitle.setText(qqnie.getNewsTitle()); viewHolder.qqnewscontent.setText(qqnie.getNewsSummary()); } return convertView; } class ViewHolder{ public ImageView qqnewspic; public TextView qqnewstitle; public TextView qqnewscontent; public ViewHolder(View baseView) { this.qqnewspic = (ImageView) baseView.findViewById(R.id.qq_news_image_link); this.qqnewstitle = (TextView) baseView.findViewById(R.id.qq_news_txt_title); this.qqnewscontent = (TextView) baseView.findViewById(R.id.qq_news_txt_summary); } } public Bitmap getBitmapFromRes(int resId) { Resources res = mContext.getResources(); return BitmapFactory.decodeResource(res, resId); } } <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="1dp"> <ImageView android:id="@+id/qq_news_image_link" android:layout_width="80dp" android:layout_height="wrap_content" android:scaleType="centerCrop" android:layout_centerVertical="true" android:layout_above="@+id/v_qq_news_line" android:background="@drawable/ic_launcher" /> <LinearLayout android:layout_marginLeft="10dp" android:id="@+id/ll_qq_news_contentandhead" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/qq_news_image_link" android:orientation="vertical"> <TextView android:id="@+id/qq_news_txt_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="标题" android:textSize="16dp" /> <TextView android:layout_marginTop="5dp" android:id="@+id/qq_news_txt_summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="内容" android:layout_marginBottom="3dp" android:textSize="12dp" /> </LinearLayout> <View android:id="@+id/v_qq_news_line" android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginBottom="3dp" android:layout_marginTop="5dp" android:background="@color/grey" android:layout_alignParentBottom="true"/> </RelativeLayout><?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:id="@+id/rl_qq_news_head" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/title_bar" android:gravity="center_vertical" android:orientation="horizontal" android:padding="3dp" android:layout_alignParentTop="true" > <TextView android:id="@+id/tv_qq_news_head_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="新闻" android:textColor="#FFF" android:textSize="20sp" android:textStyle="bold" /> </RelativeLayout> <com.curiousby.fitnessandappointment.quote.xlistview.MsgListView android:id="@+id/qq_news_list" android:layout_below="@id/rl_qq_news_head" android:background="@color/white" android:layout_width="match_parent" android:layout_height="fill_parent" android:divider="@null"> </com.curiousby.fitnessandappointment.quote.xlistview.MsgListView> </RelativeLayout>

正则表达式 qq新闻 内容抓取 正则表达

大小: 1.4 MB

正则表达式 qq新闻 内容抓取 正则表达



(此文不代表本网站观点,仅代表作者言论,由此文引发的各种争议,本网站声明免责,也不承担连带责任。)

分享给小伙伴们:

中国新媒体Copyright © 2012-2019 http://www.xmtjuj.cn中国新媒体版权所有
邮箱:3084195672@qq.com QQ:3084195672

中国新媒体是大型新媒体新闻网站,中国新媒体以聚焦新媒体的新闻视点为目标,重点挖掘新闻源和新闻点即时传播。