jsoup可以爬取静态页面,不能爬取动态加载的页面,
为了能爬取搜索功能,本来的思路是,通过HttpUnit结合jsoup 往表单添加数据,然后虚拟点击,实现请求,因为我这个功能是打算在Android端用的,经过查阅资料发现Android端不能用HttpUnit,并且也没有HttpUnit的替代品,然后放弃此方案
分析网页发现表单提交指向的路径action="/index.php/vod/search.html
通过点击按钮进行post提交,key=wd

通过okhttp进行post请求,模拟网页进行搜索,然后拿到网页html信息
OkHttpClient okHttpClient = new OkHttpClient(); //创建 okhttp对象
Request.Builder builder = new Request.Builder(); //创建请求对象
FormBody.Builder builder1 = new FormBody.Builder(); //创建表单请求体
builder1.add("wd", soso); //添加键值 =搜索的内容
builder1.add("page", (page++) + ""); //添加键值 =页数
Request build = builder.url(url) //完成请求对象
.post(builder1.build())
.build();
Call call = okHttpClient.newCall(build); //拿到call对象
call.enqueue(new Callback() { //进行异步请求
@Override
public void onFailure(Call call, IOException e) { //失败
Log.e("结果====", "失败");
}
@Override
public void onResponse(Call call, Response response) throws IOException { //成功
String string = response.body().string(); //从body里获取请求到html内容
Log.e("内容====", string);
Document parse = Jsoup.parse(string); //用jsoup解析字符串
//通过类名查找标签
Elements elementsByClass = parse.getElementsByClass("stui-vodlist__thumb lazyload");
for (Element em : elementsByClass
) { //爬取需要的内容
String title = em.attr("title");//data-original
String image = em.attr("data-original");
String href = em.attr("href"); //获得点击播放的地址
DataBean dataBean = new DataBean(title, image, href);
arrayList.add(dataBean);
runOnUiThread(new Runnable() {
@Override
public void run() { //去主线程刷新 UI
adapter_rec2.notifyDataSetChanged();
adapter_rec2.loadMoreComplete();
}
});
Log.e("内容====", dataBean.toString());
}
}
});
这样就可以模拟进行请求,然后解析出来我们想要的数据
网友评论