当前位置 博文首页 > 无水wangyang:【爬虫】初学爬虫,了解始末(概念类—更新中)

    无水wangyang:【爬虫】初学爬虫,了解始末(概念类—更新中)

    作者:[db:作者] 时间:2021-09-06 13:30

    因为对堆糖的图片心心念念,但是目前从网上翻出来的爬虫代码没有能够做到将大图保存下来的,所以决定自学爬虫,直到完成堆糖的大图片的下载(*^▽^*)

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

    传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

    [以上摘自百度百科]

    https://upload-images.jianshu.io/upload_images/7145358-1050fb55d24132b2.png

    这个技能树来源于https://www.jianshu.com/p/d9f89306a1c5?from=timeline

    有了一个清晰的脉络,就比较好着手学习。

    所以从上到下,从右到左,将技能树的内容逐一解释记录学习。

    一、HTTP相关

    1.1? HTTP协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。

    1.2 请求方法

    HTTP的请求方法(所有方法全为大写)有多种,各个方法的解释如下:

    • GET???? 获取Request-URI所标识的资源,请求指定的页面信息,并返回实体主体。
    • POST??? 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有资源的修改。

    • HEAD????请求获取响应消息报头,类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

    以上三个是HTTP1.0定义的三种请求方法,也是最常用到的方法。

    • PUT???? 请求服务器存储一个资源,从客户端向服务器传送的数据取代指定的文档的内容。

    • DELETE?? 请求服务器删除指定的页面。

    • TRACE?? ?请求服务器回送收到的请求信息,主要用于测试或诊断

    • CONNECT? ?保留将来使用,HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器。

    • OPTIONS ??请求查询服务器的性能,或者查询与资源相关的选项和需求。

    以上五个为HTTP1.1新增的请求方法。

    1.3 HTTP 状态码

    HTTP状态码(HTTP Status Code),由三个十进制的数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用,共有5种类型:

    分类分类描述
    1**信息,服务器收到请求,需要请求者继续执行操作
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步的操作完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器在处理请求的过程中发生了错误

    我们常见的状态码有:

    • 200? —— 请求成功
    • 301? —— 资源(网页等)被永久转移到其他URL
    • 400? —— 客户端请求有语法错误,不能被服务器所理解
    • 403? —— 服务器收到请求,但是拒绝提供服务
    • 404? —— 请求的资源(网页等)不存在
    • 500? —— 内部服务器错误
    • 503? —— 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    完整的HTTP状态码列表:http://www.runoob.com/http/http-status-codes.html

    1.4 HTTP请求头

    HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。(直接搬的菜鸟教程)

    应答头说明
    Allow

    服务器支持哪些请求方法(如GET、POST等)。

    Content-Encoding

    文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。

    Content-Length

    表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。

    Content-Type

    表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

    Date

    当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。

    Expires

    应该在什么时候认为文档已经过期,从而不再缓存它?

    Last-Modified

    文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

    Location

    表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

    Refresh

    表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。
    注意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。

    注意Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。

    注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。

    Server

    服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。

    Set-Cookie

    设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。

    WWW-Authenticate

    客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。
    注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

    1.5 Cookie

    指某些网站为了辨别用户身份,进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

    Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)

    1.6 身份验证

    一般来说,爬虫在对网页进行爬取访问的时候,会通过HTTP请求中的User Agent字段告知自己的身份信息。

    1.7 Ajax

    Ajax 即“Asynchronous?Javascript?And?XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    因为Ajax技术,我们在进行爬虫时,有时会发现get()的结果里没有我们想要的内容,因为加载页面时只有少量的数据交换,我们用爬虫获得的只是第一次获得的HTML,之后就需要在开发者工具里找到自己想要的数据。等到有实例的时候再具体分析。

    1.8 代理

    使用爬虫的过程中,不可避免的会遇到采取了防爬虫的网站,这时,我们就需要代理ip了。

    使用代理IP,我们首先可以从代理网站上获取代理,再验证IP是否可用。

    1.9 HTTPS

    HTTPS是HTTP的安全版,在HTTP下加入SSL层(安全套接层)。

    HTTP的端口号为80,HTTPS的端口号为443。

    1.10 WEB服务器

    Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,?[1]??也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS。

    常见的web服务器有Tomcat,Apache和Jboss。

    就我身边的人来看,使用Tomcat的人最多。

    1.11 RESTful API

    REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。

    cs