java爬虫入门(简单粗暴拿到目标网站的一些数据)
pppppps:不要再疑惑我为啥不用python爬虫,我我我我我我这就去学🤨。
这篇文章的目标是学会分析一个目标网站的基本信息结构,并将目标网站的所需数据得到
拿Tencent云的网站来举例,哦对了,建议用Chorm浏览器。
通常我们是拿上面的url去访问网页的,页面上有一些数据,那么这个网页上的数据在哪呢
- 在页面右击鼠标,点击检查,会出现下图的右边侧栏,在这里可以看到网站的一些信息。
- Elements可以查看网站的html代码,前面那个带鼠标的小箭头点击可以移动到左边的具体样式,比如一个具体的按钮,右边会将显示对应的html部分。
- Console控制台,可以看一些打印信息,也可以自己输入打印一些信息。
- Source可以看到一些js文件。
- Network可以看到所有网络包数据。
- 我们主要是要看Network,选择xhr可以看到前后端交互的数据包,主要是在这些里面找到你想要的数据。
3. 比如说关于地区的信息,我们在列表中依次打开查看,其实url名字会有一些提示,可以再看具体的Response,就是服务器给我们的响应内容,如果里面有你想要的东西,那么恭喜你已经完成第一步了——找到目标!
- 我们先用Postman模拟登录请求,可以先用来看下需要哪些信息可以访问成功,模拟成功之后再去写代码,简单节省时间,没有的网上搜下下一个,很方便的~
进来后点击new->Request,输入请求名字,备注和存储的文件夹,点击save建立成功
- 下面圈住的五部分是我们可能要用的部分。
第一个选择get/post请求,这个时候就去看你的网络包的Headers里的信息,看下是Post还是Get方式。
-
如果是GET方式的话,一般获取非常简单,只要选定GET,再在后面输入网络包里看到的Request URL,点击Send就可以成功访问,得到响应数据(强调,是我们上面在Network找到的网络包)。
-
Post会需要携带表单,稍微麻烦一些。第一行选定POST,输入目标url。
第二行的Params是一些参数,输入key和value会跟在url后面(这里不需要)
Headers是需要填写一些post的请求头信息,比如cookie(一般都需要),还有Request Headers里的一些其他信息,这个就需要自己试一下到底需要哪几个值。
Body是需要填写携带的数据,在Headers里最下面的Request Payload里。
扩展参考阅读:GET和POST两种基本请求方法的区别
在这里粘贴表单数据
- 成功访问,看到结果,恭喜你完成第二步——确定目标可以访问及如何访问!
- 最后一步——将上述过程变成代码实现!
ps:Maven记得引依赖,普通工程记得引包。
//目标url
String url="https://iaas.cloud.tencent.com/cgi/capi?i=cvm/DescribeInstanceConfigInfos";
//携带的表单数据
String jsonData="{\"serviceType\":\"cvm\",\"regionId\":1,\"action\":\"DescribeInstanceConfigInfos\",\"data\":{\"Version\":\"2017-03-12\"}}";
HttpClient client=new DefaultHttpClient();
HttpPost post=new HttpPost(url); //定义post请求
//设置请求的Headers信息
post.setHeader("content-type","application/json; charset=UTF-8");
post.setHeader("cookie", "pgv_pvi=2988804096; _ga=GA1.2.219681563.1573613938; qcloud_uid=a1ddbd47dab030fbabb5436b8dfad257; language=zh; _gcl_au=1.1.710214189.1573613942; pgv_pvid=5803553824; ts_uid=1485816228; projectName=%E5%85%A8%E9%83%A8%E9%A1%B9%E7%9B%AE; qcloud_from=gwzcw.2212127.2212127.2212127-1574153001716; qcmainCSRFToken=S1exi9j_2S; qcloud_visitId=b5f1aa7b7dcf1ca0aff0914d5cb7e322; pgv_si=s7979086848; lusername=13278887558%40163.com; intl=1; pgv_info=ssid=s9775566591; qcact.sid=s%3Asi39Y0luO_I1hvsFFw96gIZIQc6C6qre.j%2Bfi1pjDdFPtSuCN8l9ZvxQLJkxY0gMQfOhGWYdoM9Q; lastLoginType=wx; uin=o100012023360; tinyid=144115215019052908; _gat=1; skey=-71FUcLjf5RJyBRQN*fb6p3f4QhzzjQxsFzEiPEfe1g_; nick=100012023360; qb.sid=qcbase_session1574660241401-2E6VZsbMbGL1ao8dEc1jl0V5KWGT5cT1; qb.sid.sig=vOTlmQ270LOo5ejvCuJNsig3Bvk");
post.setHeader("x-csrfcode", "223685902");
//携带表单数据
StringEntity s=new StringEntity(jsonData, "utf-8");
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "appliction/json"));
post.setEntity(s);
//拿到Response,读取成String字符串
HttpResponse httpResponse=client.execute(post);
InputStream in=httpResponse.getEntity().getContent();
BufferedReader br=new BufferedReader(new InputStreamReader(in, "utf-8"));
StringBuilder strber=new StringBuilder();
String line=null;
while ((line=br.readLine())!=null) {
strber.append(line+"\n");
}
in.close();
String result=strber.toString();
if(httpResponse.getStatusLine().getStatusCode()!= HttpStatus.SC_OK){
result="服务器异常";
}
System.out.println(result);//已经获取访问服务器的数据result
优秀的参考阅读资料:HttpClient详细使用示例
摸索十小时,领悟十分钟,success,分享给黑暗中的同行者,欢迎纠正,欢迎提问~