首页
社区
课程
招聘
[原创]【Android】利用爬虫将电影网站打包成一个APP
发表于: 2018-8-21 11:51 11241

[原创]【Android】利用爬虫将电影网站打包成一个APP

2018-8-21 11:51
11241

以前总是通过HDMI线将电脑连接电视看剧看电影,但是每次想快进啊进行一些操作过于麻烦,手机上的APP的资源又太少,于是想到将电影网站打包成一个APP!
APP已经差不多做好了,最近也比较忙,没什么时间去弄,界面很丑,这里我讲讲我的主要思路,自己动手才有乐趣!
在做之前整理下思路,怎样才能把网站搬到APP上呢?
有两个方法:
1.通过WebView简单粗暴将整个网站搬过来,几十行代码搞定!但是用户体验不是很好,广告多,字体小,操作也不是很方便
2.利用爬虫,需要什么爬什么!然后将数据显示在自己做的界面上!

Let'go
首先我们搭一个界面大概的界面出来

[Java]纯文本查看复制代码


ButterKnife.bind(this);

mTabBar.init(getSupportFragmentManager())

.setImgSize(50, 50)

.setFontSize(10)

.setTabPadding(4, 6, 10)

.setChangeColor(Color.RED, Color.DKGRAY)

.addTabItem("首页", R.mipmap.ic_launcher_round, HomeFragment.class)

.addTabItem("电影", R.mipmap.ic_launcher_round, MoveFragment.class)

.addTabItem("电视剧", R.mipmap.ic_launcher_round, TVplayFragment.class)

.addTabItem("动漫", R.mipmap.ic_launcher_round, CartoonFragment.class);

[Java]纯文本查看复制代码


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;

}

}

[Java]纯文本查看复制代码


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);

}

[Java]纯文本查看复制代码


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);

}

[Java]纯文本查看复制代码


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-8-30 11:26 被wushaominkk编辑 ,原因: 上传源码
收藏
免费 1
支持
分享
最新回复 (17)
雪    币: 2685
活跃值: (3710)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
2
厉害,不过提取网页信息可能用jsoup库比较方便
2018-8-21 14:30
0
雪    币: 30
活跃值: (1332)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个可是好东西,不知道速度如何
2018-8-21 15:31
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2018-8-22 09:57
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

最后于 2018-8-23 23:47 被聖blue编辑 ,原因:
2018-8-23 23:46
0
雪    币: 76
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
暴强 这个可是好东西,不知道速度如何
速度还行,有点小问题,就是网络请求的时候有时候会请求超时
2018-8-26 18:23
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不太懂
2018-8-26 20:31
0
雪    币: 76
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
落叶似秋 厉害,不过提取网页信息可能用jsoup库比较方便
感谢,换了jsoup库性能提升不少
2018-8-27 09:02
0
雪    币: 1385
活跃值: (5609)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
10
源码呢?
2018-8-27 14:44
0
雪    币: 1464
活跃值: (707)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
不错,支持一下。
2018-9-5 12:53
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
请问这个可以转载吗?转载到别的平台?
2018-9-12 17:09
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
厉害了老哥
2018-9-18 14:53
0
雪    币: 30
活跃值: (1332)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
2018-9-29 05:48
0
雪    币: 2714
活跃值: (1611)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
挺赞的。  倒链会被查吧
2018-9-29 18:21
0
雪    币: 76
活跃值: (41)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
菠萝_435719 请问这个可以转载吗?转载到别的平台?
转载麻烦备注下,谢谢!
2018-12-10 10:35
0
雪    币: 268
活跃值: (3238)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
最近遇到js加密的问题,。js加密怎么找到能再具体说下?
2018-12-10 11:09
0
游客
登录 | 注册 方可回帖
返回
//