去评论
就爱江湖 Www.92Jh.Cn

利用爬虫将电影网站打包成一个APP【二】

q3196355
2019/08/22 10:47:23
首先通过网络请求获取整个页面数据,然后正则匹配找到我们需要的数据,图片,链接,标题和评分,新建一个Bean类将数据储存到里面


public class DataBean {
    private String DataName;
    private String DataScore;
    private String DataImg;
    private String DataNetWork;

    public String getDataName() {
        return DataName;
    }

    public void setDataName(String dataName) {
        DataName = dataName;
    }

    public String getDataScore() {
        return DataScore;
    }

    public void setDataScore(String dataScore) {
        DataScore = dataScore;
    }

    public String getDataImg() {
        return DataImg;
    }

    public void setDataImg(String dataImg) {
        DataImg = dataImg;
    }

    public String getDataNetWork() {
        return DataNetWork;
    }

    public void setDataNetWork(String dataNetWork) {
        DataNetWork = dataNetWork;
    }
}

通过recyclerView将数据显示到界面上,通过接口回调设置点击事件点击图片跳转到详情页

RequestQueue queue = Volley.newRequestQueue(getActivity());
        MyStringRequest stringRequest = new MyStringRequest(getHosturl(), new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                String regEx = "<li><div class=li-box><div class=img-box></div><a href=\"(.+?)\"><img src=\"(.+?)\" onerror=\".+?\"><span class=back></span><span>(.+?)</span></div><P><a href=\".+?\" target=\"_blank\">(.+?)</a></P></li>";

                Pattern pattern = Pattern.compile(regEx);
                mMatcher = pattern.matcher(response);
                if (mData != null) {
                    mData.clear();
                }
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        while (mMatcher.find()) {
                            //Log.e(TAG, matcher.group());
                            /*Log.e(TAG, mMatcher.group(1));
                            Log.e(TAG, mMatcher.group(2));
                            Log.e(TAG, mMatcher.group(3));
                            Log.e(TAG, mMatcher.group(4));*/
                            DataBean dataBean = new DataBean();
                            dataBean.setDataNetWork(mMatcher.group(1));
                            dataBean.setDataImg(mMatcher.group(2));
                            dataBean.setDataName(mMatcher.group(4));
                            dataBean.setDataScore(mMatcher.group(3));
                            mData.add(dataBean);
                        }
                    }
                }).start();
                if (mHomeAdapter == null) {
                    mHomeAdapter = new homeAdapter(getContext(), mData, mGridLayoutManager);
                }
                mRecyclerView.setAdapter(mHomeAdapter);
                mHomeAdapter.notifyDataSetChanged();
                mTvThisPage.setText("第"+mThisPage+"页");
                Toast.makeText(getContext(), "第" + mThisPage + "页", Toast.LENGTH_SHORT).show();
                mHomeAdapter.setItemClickListener(new homeAdapter.OnItemClickListener() {
                    @Override
                    public void onItemClick(int position) {
                        String url = mData.get(position).getDataNetWork();
                        String title = mData.get(position).getDataName();
                        String img_url = mData.get(position).getDataImg();
                        String requestUrl = getHosturl() + url;
                        //Toast.makeText(getContext(), requestUrl, Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getContext(), DetailsActivity.class);
                        intent.putExtra("title", title);
                        intent.putExtra("img_url", img_url);
                        intent.putExtra("requestUrl", requestUrl);
                        startActivity(intent);
                    }
                });

                //Log.e(TAG, response);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, error.getMessage(), error);
                mThisPage--;
                Toast.makeText(getContext(), "网络不稳定!加载失败!请稍后重试!", Toast.LENGTH_SHORT).show();

            }
        });
        queue.add(stringRequest);
    }




为了便于维护将首页封装成基类,然后将电影,电视剧和动漫页面继承,稍加改动,这样4个页面就出来了



public class MoveFragment extends HomeFragment implements View.OnClickListener {

    @Override
    protected void intitView() {
        hostUrl = "http://m.yiybb.com/dianying/";
        super.intitView();
        mThisPage = 1;
        listTpye = "List_15_";
        mTvThisPage.setVisibility(View.VISIBLE);


    }

    @Override
    protected void initData() {
        super.initData();
    }

    @Override
    protected String setTitle() {
        return "电影";
    }

    @Override
    protected void setViibilly() {
        page.setVisibility(View.VISIBLE);
    }