互联网爬虫的爬取思路 -------基于java的

1.0 模拟http请求

怎么模拟?用什么模拟?注意的问题 ?

模拟浏览器的行为用java的的 httpclient 这个jar包来实现 我们可以用wireshark这个网络分析抓包工具 抓取我们电脑的http请求 看看他的协议头都有啥 然后用httpclient对应函数添加进去就ok了

httpclient中文教程

或者

httpclient 指南

1.1 http请求的执行过程(资料来源 百度知道

更加详细的http分析点击这里
http请求的基本过程是连接、请求、应答、关闭连接。

1.连接: 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。

DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS。

整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。现在已经拥有了目标ip和端口号,这样我们就可以打开socket连接了。

2.请求: 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1.0。

文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。现在可以发送GET命令:GET /mydir/index.html HTTP/1.0。

3.应答 :web服务器收到这个请求,进行处理,从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。

为了告知浏览器,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。

常用的HTTP头信息有:

① HTTP 1.0 200 OK:  这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码,代码”200 OK”表示请求完成。

② MIME_Version:1.0: 它指示MIME类型的版本。

③ content_type:类型: 这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。

④ content_length:长度值: 它指示HTTP体信息的长度(字节)。

4.关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。

下面我们用火狐浏览器 随便打开一个网址 按f12 如下
这里写图片描述

点击网络 在2处输入http 点击回车

这里写图片描述

在2处随便选择一个选项 会出现3 4 的内容 这就是http的响应头和响应体
如果不知道英文的意思
这里写图片描述
点击问号会有解释

这就是我为什么会用火狐的原因 别的浏览器搞不了

2.0 接收我们请求的响应

一般我们的请求会这么写

    CloseableHttpClient httpclient = HttpClients.createDefault();

    HttpGet httpget = new HttpGet("http://localhost/");

    CloseableHttpResponse response = httpclient.execute(httpget);
  1. 实例化httpclient这个类 并且设置好一些默认值 这个默认值一般就是http请求头 如果你不写就是默认值
  2. 设置你要请求的方法 并且设置路径
  3. 执行http请求 返回http响应

response 包含很多方法来获取响应头和响应体 响应体就是源码

3.0 有了源码之后就可以解析源码了 我用的是jsoup

4.0 解析之后 就是存储数据 分析 可视化等等自己想做的加工了

5.0 关于反爬虫

模拟手机端进行爬虫会容易的多

/*****************************************************************************************/
常见的反爬虫

  从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。这里我们只讨论数据采集部分。

  一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式。前两种比较容易遇到,大多数网站都从这些角度来反爬虫。第三种一些应用ajax的网站会采用,这样增大了爬取的难度。

/*****************************************************************************************/
  通过Headers反爬虫

  从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

/*****************************************************************************************/
  基于用户行为反爬虫

  还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。

  大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。这样的代理ip爬虫经常会用到,最好自己准备一个。有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。

  对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。

/****************************************************************************************/
  动态页面的反爬虫

  上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过ajax请求得到,或者通过Java生成的。首先用Firebug或者HttpFox对网络请求进行分析。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

  能够直接模拟ajax请求获取数据固然是极好的,但是有些网站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。我这几天爬的那个网站就是这样,除了加密ajax参数,它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。遇到这样的网站,我们就不能用上面的方法了,我用的是selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。

  用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加 Headers一定程度上就是为了伪装成浏览器),它本身就是浏览器,phantomJS就是一个没有界面的浏览器,只是操控这个浏览器的不是人。利用 selenium+phantomJS能干很多事情,例如识别点触式(12306)或者滑动式的验证码,对页面表单进行暴力破解等等。它在自动化渗透中还 会大展身手,以后还会提到这个。
/*****************************************************************************************/

我们爬取网站要有最起码的规范 不要给服务器太大压力 要不然人家服务器蹦掉了 你还搞毛?

所以设置个sleep(1000) 也是正确的

6.0 关于获取用js设置的数据 以后再说 上面的反爬虫已经说明了思路了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值