《 Python3 网络爬虫开发实战》学习笔记1-爬虫基础

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

目录(第1部分)

第1章开发环境配置

第2章爬虫基础

2.1 HTTP基本原理

2.1.1 URI和URL

2.1.2超文本

2.1.3 HTTP和HTTPS

2.1.4 HTTP请求过程

2.1.5请求

2.1.6响应

2.2网页基础

2.2.1网页的组成

2.2.2网页的结构

2.2.3节点树及节点间的关系

2.2.4选择器

2.3爬虫的基本原理

2.3.1爬虫概述

2.3.2能抓取怎样的数据

2.4会话和饼干

2.4.1静态网页和动态网页

2.4.2无状态HTTP

2.4.3常见误区

2.5代理的基本原理

2.5.1基本原理

2.5.2代理的作用

2.5.3爬虫代理

2.5.4代理分类

2.5.5常用代理设置


第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定义了网页的内容和结构。

2. CSS

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

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

3.JavaScript

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

2.2.2网页的结构

<!--第一个 HTML 例子 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a title</title>
</head>
<body>
<div id="container">
<div class="wrapper">
<h2 class = "title">Hello World</h2>
<p class = "text">Hello, this is a paragraph.</p>
</div>
</div>
</body>
</html>

这个实例便是网页的一般结构。一个网页的标准形式是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渲染页面

<!-- JavaScript 渲染页面例子 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a title</title>
</head>
<body>
<div id="container">
</div>
</body>
<script src = "app.js"></script>
</html>

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.会话(在服务端,用来保存用户的会话信息)

2. 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拨号(稳定性高,也是一种比较有效的解决方案)

猜你喜欢

转载自blog.csdn.net/qwe641259875/article/details/83412782