掘金 后端 ( ) • 2021-11-30 18:04

本记录将按照本人的学习进程,将学习过程中遇到的问题和重难点如实记录下来,一个是巩固自身所学,另一个也希望能对后来人有所帮助。

第1章开发环境配置

这里不做过多的叙述,环境配置是每一个学习编程的人都应掌握的基本功,遇到的时候自行百度即可,如果有书的同学也可看书解决,书中写得很详细了。

第2章爬虫基础

这章是本节笔记的重点内容,包括以下内容:

其中HTTP相关内容可以参考我另一篇计算机网络相关的博客

2.1 HTTP基本原理

2.1.1 URI和URL

URI:Uniform Resource Identifiers,统一资源标识符

URL :Uniform Resource Locator,统一资源定位符

URN:Uniform Resource Name,统一资源名称

URL是URI的子集,URI包括URL和URN,URL与URN有交集,简单的理解,网站的链接,网页上图片的链接,都是URL,而URN用得很少,知道有这么个东西就够了。

2.1.2超文本

超文本:英文名为超文本,例如网页的源代码的HTML就可以称为超文本。

在铬浏览器里面打开任意一个页面,右击空白处,选择“检查”(或者直接按下F12),即可打开浏览器的开发者工具,在元素选项卡即可看到当前网页的源代码,这些源代码都是超文本。

2.1.3 HTTP和HTTPS

URL以HTTP,HTTPS,FTP,SFTP,SMB开头,这些都是协议。而HTTP是用于从网络传输超文本数据到本地浏览器的协议,它能保证高效而准确地传送超文本文档。目前广泛使用的是HTTP 1.1版本。

HTTPS的全称是超文本传输​​协议安全套接字层的英文以安全为目标的HTTP通道,简单讲就是HTTP的安全版,即HTTP下加入SSL层,简称为HTTPS

某些网站虽然使用了HTTPS协议,但还是会被浏览器提示不安全,如在Chrome浏览器中打开12306,链接为:https://www.12306.cn/,这时浏览器就会提示“您的连接不是私密连接”。(改用HTTP协议就可以正常打开网页)

原因:12306的CA证书是中国铁道部自行签发的,不被CA机构信任,因此这里的证书验证就不会被通过而提示不安全,但实际上它的数据传输依然的英文经过SSL加密的如果。要爬取这样的站点,就需要设置忽略证书的选项,否则会提示SSL链接错误。

2.1.4 HTTP请求过程

客户端向服务器发送请求,服务器接收到请求之后,进行处理和解析,然后返回对应的响应,接着传回给浏览器。

响应里面包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来。

2.1.5请求

1.请求方法

常见的钱请求方法:GET和POST,区别:

  • GET请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单的形式传输的,会包含在请求体中。
  • GET请求提交的数据最多只有1024字节,而POST方式没有限制。

请求的网址

即URL。

请求头

比较重要的有饼干,引用站点,用户代理等。

在写爬虫时,大部分情况下都需要设定请求头。

请求体

请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。

注意内容类型和POST提交数据方式的关系。在爬虫中,如果要构造POST请求,需要使用正确的内容类型,并了解各种请求库的各个参数设置时使用的是哪种内容类型,不然会导致POST提交之后无法正常响应。

2.1.6响应

1.响应状态码(Response Status Code)

表示服务器的状态,如200代表服务器正常响应,404代表页面没有找到,500代表服务器内部发生错误。

2.响应头(Response Headers)

包含了服务器对请求的应答信息,如内容类型,服务器,设置Cookie等。

3.响应体(Response Body)

响应的正文数据都在响应体重,比如请求网页时,它的响应体就是网页的HTML代码。我们做爬虫请求网页后,要解析的内容就是响应体。在浏览器开发者工具中点击预览,就可以看到网页的源代码,也就是响应体的内容,它是解析的目标。

在做爬虫时,我们主要通过响应体得到网页的源代码,JSON数据等,然后从中做相应内容的提取。

关于HTTP这部分的内容,可以看“图解HTTP”了解更多,迅速过一遍即可。(可以网购也可以直接看PDF版本,点此下载

2.2网页基础

2.2.1网页的组成

  1. HTML

即超文本标记语言:超文本标记语言

我们在开发者模式中,在元素选项卡中即可看到网页的源代码。这些代码就是HTML,整个网页就是由各种标签嵌套组合而成的。 简言之,HTML定义了网页的内容和结构。

  1. CSS

全称为Cascading Style Sheets,即层叠样式

CSS是目前唯一的网页页面排版样式标准。在网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中。在HTML中,只需要链接标签即可引入写好的CSS文件,这样整个页面就会变得美观,优雅。简言之,CSS描述了网页的布局。

3.JavaScript

简称JS,是一种脚本语言.HTML和CSS配合使用,提供给用户的只是一种静态信息,缺乏交互性。我们在网页里可能会看到一些交互和动画效果,如下载进度条,提示框,轮播图等,这通常就是JavaScript的功劳。简言之,JavaScript定义了网页的行为。

2.2.2网页的结构






This is a title


Hello World

Hello, this is a paragraph.

这个实例便是网页的一般结构。一个网页的标准形式是html标签内嵌套头和身体标签,头内定义网页的配置和引用,body内定义网页的正文。

2.2.3节点树及节点间的关系

在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。

DOM是W3C(万维网联盟)的标准,其全称是文档对象模型,即文档对象模型。它定义了访问HTML和XML文档的标准。而根据此标准,HTML文档中的所有内容都是节点。

2.2.4选择器

在CSS中,我们使用CSS选择器来定位节点。

三种常用的选择方式:

  • 根据id:如上例中div节点的id为容器,就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。
  • 根据类:以点(.)开头代表选择类,其后紧跟类的名称。
  • 根据标签名:例如想选择二级标题,直接用h2即可。

想学习关于HTML,CSS,JavaScript的更多知识,建议参考  W3school中的教程

2.3爬虫的基本原理

2.3.1爬虫概述

简单来说,爬虫就是获取网页并提取和保存信息的自动化程序

1.获取网页(urllib,requests)

2.提取信息(Beautiful Soup,pyquery,lxml)

3.保存数据(TXT文本,JSON文本,【数据库】MySQL,MongoDB,【远程服务器】SFTP)

4.自动化程序

2.3.2能抓取怎样的数据

  • HTML源代码
  • JSON字符串
  • 二进制数据(图片,视频,音频)
  • CSS,JavaScript中,配置文件
  • 总而言之,只要在浏览器中可以访问,就可以将其抓取下来(基于HTTP或HTTPS协议的)

2.3.3 JavaScript渲染页面






This is a title


body节点里面只有一个id为container的节点,但是需要注意在body节点后引入了app.js,它负责整个网站的渲染。

对于这样的情况,我们可以分析其后台Ajax接口,也可使用Selenium,Splash这样的库来模拟JavaScript渲染。

2.4会话和Cookies

在浏览网站的过程中,我们经常会遇到需要登陆的情况,有些页面只有登陆之后才可以访问,而且登陆之后可以连续访问很多次,但是有时候过一段时间就需要重新登陆。还有一些网站,在打开浏览器的时候就自动登陆了,而且很长时间都不会失效。这里面涉及了会话(Session)和Cookies。

2.4.1静态网页和动态网页

静态网页:加载速度快,编写简单,但是存在很大的缺陷,如可维护性差,不能根据URL灵活多变地显示内容。

动态网页:可以动态解析URL中参数的变化,关联数据库并动态呈现不同的页面内容,非常灵活多变。

2.4.2无状态HTTP

HTTP协议对事务处理是没有记忆能力的。

1.会话(在服务端,用来保存用户的会话信息)

  1. Cookies(在客户端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断用户是否是登陆状态,然后返回对应的响应。)

2.4.3常见误区

“只要关闭浏览器,会话就消失了” - (错误)

由于关闭浏览器不会导致会话被删除(因为浏览器不会在关闭前通知服务器它将要关闭),这就需要服务器为会话设置一个失效时间,当距离客户端上一次使用会话的时间超过这个时间时,服务器就可以认为这个客户端已经停止了活动。

2.5代理的基本原理

2.5.1基本原理

本机不直接向Web服务器发送请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。

2.5.2代理的作用

  • 突破自身IP访问限制,访问一些平时不能访问的站点。
  • 访问内网资源
  • 提高访问速度
  • 隐藏真实IP

2.5.3爬虫代理

IP访问过于频繁的问题,就需要使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己。

2.5.4代理分类

1.根据协议区分

  • FTP代理服务器(端口一般为21,2121)
  • HTTP代理服务器(8080,3128)
  • SSL / TLS代理服务器(最高支持128位加密强度,443)
  • RTSP代理(554)
  • 远程登录代理(主要用于TELENT远程控制,23)
  • POP3 / STMP(110/25)
  • SOCKS代理

2.根据匿名程度区分

  • 高度匿名代理(会将数据包原封不动地转发,服务器端看来就像一个普通的用户客户端在访问)
  • 普通匿名代理(会在数据包上做一些改动,有可能被发现这是个代理服务器,也有一定几率被追查到真实IP)
  • 透明代理(一般用于提高浏览速度)
  • 间谍代理

2.5.5常用代理设置

  • 网上的免费代理(可用的代理不多,最好使用高匿)
  • 付费代理(质量比免费代理好很多)
  • ADSL拨号(稳定性高,也是一种比较有效的解决方案)