网络爬虫原理

目录1网络爬虫原理2写网络爬虫的原因3网络爬虫的流程4网络抓包5HTTP状态码说明6Java网络爬虫需要的基础知识1、网络爬虫原理网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D到E到C

大家好,又见面了,我是你们的朋友全栈君。

目录

1、网络爬虫原理

网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D 到E 到C到 F(ABDECF)而宽度优先的遍历方式ABCDEF 。

这里写图片描述

2、写网络爬虫的原因

我将为什么写网络爬虫的原因总结为3点,分别是:

(1)互联网中的数据量大,我们不能人工的去收集数据,这样会很浪费时间与金钱。而爬虫有个特点就是能批量、自动化的获取和处理数据。本人写过各大汽车论坛上的爬虫以及大众点评网,tripadvisor(国外网站)的爬虫,爬取的数据已有几千万之多,可想你如果一条条去复制,到老死也完不成吧。

(2)爬虫很酷。前段日子,看到有人利用爬到了腾讯3000万QQ数据,包含(QQ号,昵称,空间名称,会员级别,头像,最新一条说说内容,最新说说的发表时间,空间简介,性别,生日,所在省份,城市,婚姻状况)的详细数据,并绘制了各种有趣的图表。

(3)对于读研、读博,做数据挖掘、数据分析的人而言,没有数据做实验,是一件很蛋疼的事情。你可能每天在各种论坛问这个问那个要数据,是不是很烦呢。

3、网络爬虫的流程

这里写图片描述

简单的网络爬虫,通过上述图便可完成。首先是给定一个待爬取的URL队列,然后通过抓包的方式,获取数据的真实请求地址。接着采用httpclient模拟浏览器将相应的数据抓取下来(一般是html文件或者是json数据)。由于网页中的内容很多,很复杂,很多内容并不是我们需要的,所以我们需要对其进行解析。针对html的解析很简单,通过Jsoup(Dom解析工具)、正则表达式便可完成。针对Json数据的解析,这里我建议一款快速解析工具fastjson(阿里开源的一个工具)

4、网络抓包

网络抓包,(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,经常被用来进行数据截取等。在针对数据响应为Json或者需要针对需要用户名、密码登陆的网站,抓包显得尤为重要,抓包也是编写网络爬虫的第一步。

这里写图片描述

如图为东方财富网,抓包的结果,可以看出真实响应地址:Request URL和上面网页请求的地址并不相同,而我们再来看看响应的股票数据。响应的数据格式是JSON文件,在这里我们可以看到,股票数据一共有61页,其中当前页的数据为data【Json数据】。

这里写图片描述

所以利用网络抓包,是网络爬虫的第一步,其可以直观的看到数据请求的真实地址,请求方式(post、get请求),数据的类型(html还是Json数据)

5、HTTP状态码说明

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。当我们打开一个网页时,如果网页能够返回数据,也就是说影响成功了,一般状态响应码都是200。当然状态响应码,包括很多内容,下面列举了,状态响应码,及其表示的含义,其中加错的是在爬虫中经常遇到的:
100:继续 客户端应当继续发送请求。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。
101: 转换协议 在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。只有在切换新的协议更有好处的时候才应该采取类似措施。
102:继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
200:请求成功 处理方式:获得响应的内容,进行处理
201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到
202:请求被接受,但处理尚未完成 处理方式:阻塞等待
204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。 处理方式:丢弃
300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
304:请求的资源未更新 处理方式:丢弃
400:非法请求 处理方式:丢弃
401:未授权 处理方式:丢弃
403:禁止 处理方式:丢弃
404:没有找到 处理方式:丢弃
500:服务器内部错误 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
501:服务器无法识别 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
502:错误网关 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503:服务出错 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

6、Java网络爬虫需要的基础知识

如下图所示,为我总结的基于java的网络爬虫所需的知识,或者随着学习的深入,可以通过爬虫的深入学习,可以学习到的Java知识。其实,小编本科是个学营销管理的,本科没有学习过Java,利用大四的后3个月吧,就基本把这些搞定了。加油。下面我会对爬虫中的知识写一些博客。有问题,请发邮件1563178220@qq.com
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125713.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • JVM进阶(十一):JAVA G1收集器

    JVM进阶(十一):JAVA G1收集器JVM进阶(十一)——JAVAG1收集器  在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器——G1收集器。先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利用多个CPU进行工作,收集方式也与CMS收集器类似,因此不会有太久的停顿。  虽然回收的范围是整个堆,但还是有分代回收的回收方式。在年轻代依然采用复制算法;年老代也同样采用“标记-清除

  • 硬件SPI控制ST7789V「建议收藏」

    文章目录前言一、能用的方法有那些?1.利用硬件UART模拟SPI,实现9位数据发送2.搭建一个数字逻辑电路,人为实现9位spi发送3.发送两组8位SPI二、具体操作1.具体实现总结前言这段时间闲着没事,决定自己做个手表玩玩,参考了一些开源项目和数据手册,决定主控使用STM32F411CEU6,屏幕选用了淘宝一家商家的ST7789V主控的240*240分辨率的圆形tft屏幕。利用商家给的软件spi例程成功将屏幕点亮之后,尝试使用改为硬件spi的方式,加快屏幕的刷新速度但是尝试了多种方案后始终无法点亮,

  • 原创收藏室_如何把收藏网页添加到首页

    原创收藏室_如何把收藏网页添加到首页JavaScript代码://设为首页functionSetHome(obj,url){try{obj.style.behavior=’url(#default#homepage)’;obj.setHomePage(url);}catch(e){if(window.netscape){…

  • java 获取当前时间的三种方法_java获取单层文件夹大小

    java 获取当前时间的三种方法_java获取单层文件夹大小A获取当前时间:Java代码importjava.text.SimpleDateFormat;importjava.util.Date;publicclassGetCurrentTime{/*获得当前时间*/publicstaticStringgetCurrentTime(){DatecurrentTime=newDate();SimpleDateFormatformat…

  • oracle中锁表语句,oracle查询锁表解锁语句

    oracle中锁表语句,oracle查询锁表解锁语句一.查询锁定的表如下语句,都可以查询锁定的表语句一:selecta.sid,a.serial#,p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_namefromv$processp,v$sessiona,v$locked_objectb,all_objectscwherep.addr=a.paddr…

  • Mysql错误:#1054 – Unknown column ‘id’ in ‘field list’ 解决办法

    Mysql错误:#1054 – Unknown column ‘id’ in ‘field list’ 解决办法

    2021年10月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号