开发者学堂课程【大数据实战项目:反爬虫系统(Lua+Spark+Redis+Hadoop框架搭建):爬虫介绍-爬虫导入IDEA+爬虫效果】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/670/detail/11619
爬虫介绍-爬虫导入IDEA+爬虫效果
内容简介:
一、测试
二、爬虫导入IDEA
三、爬虫效果
一、测试
上节把数据采集的脚本已经彻底写完了,通过这种方式获取一个一个的数据,然后把它拼一个字符串,然后打到 kafka 里面,这就是数据采集阶段。再往后看,需要用到浏览器进行测试,这已经已经测过了,在浏览器中输入 nginx 的 ip 地址,
如下图所示:
上述 ip 已经输入进去,并能够把数据打进去。然后是写一个测试程序,这个不用写,直接通过 kafka 的消费端能够看到数据流进去就可以了,这个能看到数据,就说明打通了,而且是有数据的,以上这是测试。
二、爬虫导入IDEA
1、爬虫导入
反爬虫的总体目标就是为了识别爬虫,既然要去识别,就得有一个爬虫,那么爬虫在哪儿?
实际上爬虫已经准备好了,点击进入反爬虫项目当中的素材文件夹,素材当中有一个项目代码,项目代码里面有一个爬虫文件夹,在这里面的工程就是给准备好的爬虫,所以只需把这个爬虫引到项目中去,当前的webproject 是提供的企业端的界面,就是此界面的可视化的 web 工程,
如下图所示:
2、单程和往返的内涵
现在把准备好的爬虫引进来,打开 open 找到项目,从一个新的窗口上把爬虫引进来,便是反爬虫项目真正提供的爬虫的代码,先简单介绍下,先把代码打开,在代码里面其实提供了两个核心代码,一个是SpiderGoAirCN ,这个是国内查询的单程航班,后面的另一个核心代码 SpiderGoAndBackAirCN 是国内查询的往返航班,一个是单程的,一个是往返的,单程和往返是什么意思?
前面简单介绍过看过,再来回顾一下,现在以去哪儿网为例,去哪儿网公司的首页里在查询时,不管是国际还是国内的,它在查询时都提供了是单程还是往返的业务需求,若你要购买飞机票,买单程还是往返是可选的,这是去哪儿网首页,
如下图所示:
南方航空里面它也分为单程和往返,单程和往返可以自由选择,如下图所示:
这个是企业里面进行购票时,必须填的信息,是单程还是往返要搞清楚,爬虫就是为了模拟这两种场景,单程票就只是过去,回来时再购票;往返就是去的票和回的票同时买,同时买两个。
三、爬虫效果
1、爬虫内部解析
然后再来看爬虫内部,在 SpiderGoAirCN 内部代码如下所示:
package cn.itcast.spider.csair;
import ...
/**
* 查询国内单程航班
*/
public class SpiderGoAirCN {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 50000;i++) {
system.out.println(
“
>>>>>>>>>>>>>>>>>>>>>>>
”
+i);
//请求查询信息
spiderQueryao();
//请求 html
spiderHtml();
//请将 js
spiderJs();
//请求 css
spiderCss();
//请求 png
spiderPng();
//请求 jpg
spiderJpg();
thread.sleep( millis: 1000);
}
}
其里面实际就是一个 for 循环,循环多次,从第1次一直到5万次,然后每次中间睡一秒钟,每两次之间 sleep 一秒钟,然后前面做了输出,即输出是第几次,后面做了请求查询信息、请求 html 、请求js 、请求 css 、请求 png 、请求 jpg 的,每一个循环有很多种查询动作,这个是在循环里面。
2、Queryao 内部
接下来进入里面来看,首先看 Queryao 里面, Queryao 里面实际上就是一次循环中第一次访问内容里面,如下所示:
public static void spiderQueryao() throws Exception {
//1.指定目标网站
String url =
“http://192.168.2.141/B2C40/query/jaxb/direct/query.ao”
;
//2.发起请求
HttpPost httpPost = new HttpPost(url));
//3.设置请求次数
httpPost.setHeader(
“
Time-Local
”
,getlocalDateTime());
//httpPost.setHeader(
“
Request
”
,
”
POST /B2C40/query/jaxb/direct/query.ao.HTTP/
httpPost.setHeader(
“
Request Method
”
,”POST“);
httpPost.setHeader(
“
Content-Type
”
,
“
application/x-www-form-urlencoded;charset=UTF-8);
httpPost.setHeader(
“
Refer
”
,
“http://b2c.csair.com/B2C40/modules/bookingnew/main/flightSelectDirect;
+ getGoTime() +
“
&at=i&at=0&it=0
”
);
httpPost.setHeader(
“
Remote Address
”
,
“
192.168.2.1
”
);
httpPost.setHeader(
“
User-Agent
”
,
把项目导进来以后,需要把这个项目修改,这是爬虫,那爬哪一台服务器? ip 是多少?
需要在 Queryao 里面,上文代码中可以看到个string 类型的 URL ,这里 http 里面跟了192.168的 ip ,
把这个ip 改成192.168的 nginx 的服务器的 ip ,当刷新界面,实际上就是界面有了一个请求,然后到了192.168.100.160的服务器上去访问nginx ,所以现在要让爬虫访问此节点,那就只需把把192.168.2.141的 ip 改成192.168.100.160放得下找到了,同样自己电脑上 nginx上的 ip 是多少,就改成多少,以上这个是 Queryao 的。
3、Html 内部
还有 html 的,点进去内容如下:
public static void spiderHtml() throws Exception {
//1.指定目标网站
String url =
“http://192.168.2.141/B2C40/modules/bookingnew/main/flightSelectDirect.html”
;
//2.发起请求
HttpPost httpPost = new HttpPost(url));
//3.设置请求次数
httpPost.setHeader(
“
Time-Local
”
,getLocalDateTime());
//httpPost.setHeader(
“
Request
”
,
”
POST /B2C40/query/jaxb/direct/query.ao.HTTP/1.1
”
)
httpPost.setHeader(
“
Request Method
”
,”POST“);
httpPost.setHeader(
“
Content-Type
”
,
“
application/x-www-form-urlencoded;charset=UTF-8);
httpPost.setHeader(
“
Refer
”
,
“http://b2c.csair.com/B2C40/modules/bookingnew/main/flightSelectDirect;
+ getGoTime() +
“
&at=i&at=0&it=0
”
);
httpPost.setHeader(
“
Remote Address
”
,
“
192.168.2.1
”
);
httpPost.setHeader(
“
User-Agent
”
,
可以看到 html 也有一个2.141,所以也把它改成100.160。
4、Js 内部
再往前走,有 js 的,点击进去内容如下:
public static void spiderJs() throws Exception {
//1.指定目标网站
String url =
“http://192.168.2.141/B2C40/dist/main/main/modules/common/requireConfig.js”
;
//2.发起请求
HttpPost httpPost = new HttpPost(url));
//3.设置请求次数
httpPost.setHeader(
“
Time-Local
”
,getLocalDateTime());
//httpPost.setHeader(
“
Request
”
,
”
POST /B2C40/query/jaxb/direct/query.ao.HTTP/1.1
”
)
httpPost.setHeader(
“
Request Method
”
,”POST“);
httpPost.setHeader(
“
Content-Type
”
,
“
application/x-www-form-urlencoded;charset=UTF-8);
httpPost.setHeader(
“
Refer
”
,
“http://b2c.csair.com/B2C40/modules/bookingnew/main/flightSelectDirect.html;
httpPost.setHeader(
“
Remote Address
”
,
“
192.168.2.1
”
);
httpPost.setHeader(
“
User-Agent
”
,
“
Mozilla/5,0 (Windows NT 10.0;Win64; x64)AppleWebKit/537.36(KHTML.like
可以看到它也有一个2.141,也把它改成100.160,然后此服务器的ip也要改成100.160。
5、爬虫效果执行
再往后看,实际上 css 也有这个内容,也是将其改为100.160, png 、jpg 也都一样,历史的项目中有2.141的也都改成100.160个,到这里反爬虫上的爬虫的 IP 改成了服务器上的 IP ,即192.168.100.160。
改完之后,实际上爬虫就准备好了,接下来让它跑一下,实际上把它爬虫引进来以后,直接把里面的 IP 改成 nginx服务器里的 IP 就可以,然后来跑一下爬虫,直接右键执行 run 就可以了,先把爬虫的 kafka 的消费者界面打开,现在来执行爬虫,先看国内单程的,右键开始 run 执行时,这时它应该会在后台去访问100.160,访问以后 kafka 界面应该有数据刷起来,循环一次就访问六次,即循环一次就有6条数据进来,现在右键执行,
后台界面如下图所示:
可以看到它是一秒钟刷一次,每次都刷好多内容,这就说明爬虫达到了效果,这个就是爬虫,本节简单的将爬虫做了一个介绍。