Python网络爬虫从0到1----(一)爬虫基础

0 写在前面:

这是我第一次在csdn上写博客,markdown还用的不是很熟练(所以排版会有一点点乱-_-)。这个blog系列的初衷是记录下来我从0开始学习网络爬虫的全过程,也希望能和大家一起交流、分享!
不知不觉的发现现在网络上各种资源都开始收费,先不说各大视频软件的VIP,现在就连在网上搜一道高数题都开始“点击开通会员查看答案”了,可以说是信息变得越来越昂贵了。所以我想通过学习爬虫这项技术来了解如何爬取网络上许多本不应该受限的资源。
今天是学习的第一天,是有关爬虫的基本知识,包括HTTP原理网页的基础知识爬虫的基本原理Cookies的知识

1 HTTP原理

1.1 HTTP 和HTTPS

总的来讲,HTTP和HTTPS都是一种超文本传输协议,我的理解是可以把他们看成一个字典,服务端和客户端按照这个字典学习“传输语言”,并且使用这种传输语言进行沟通交互。
在百度百科上http和https的定义是这样的:
HTTP:

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。

HTTPS:

TTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面

相比HTTP,HTTPS多了一层SSL层,传输的内容多了一层安全性,既可以建立一个信息安全通道来保证数据的安全,又可以确认网站的安全性。(一般在浏览器中带有小锁头的都是https的网站,比如我现在写博客的网站)
看左边的锁头

1.2 URI、URL、URN

有了传输协议后,服务器与客户端已经具备了沟通的条件,但如果想获得网络上的资源,还要获得资源的地址、名称等信息,URL,URI,URN便是这些定位符和标识符的表现形式。
在百度百科上的定义是这样的:
URI(统一资源标志符):

在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。

URL(统一资源定位符):

统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。

URN(统一资源名称):

统一资源名(URN,Uniform Resource Name)是带有名字的因特网资源

URI,URN,URL的关系如下图,三者都是可以被浏览器解析而获取资源的。但值得注意的是现在URN用的很少,所以我们平常所接触的也是最经常听说的就是URL。

URI URL URN

1.3 HTTP请求过程

在我们在浏览器中输入网址到获取页面这段时间中,其实是客户端服务器之间请求和相应的过程。可以把服务器看成仓库,把URL看成需求清单,我们就是拿着需求清单找浏览器的解析器来获取仓库中的资源的。
在浏览器的检查项中可以看到输入网址到获得网页的全过程(部分):
在这里插入图片描述
输入一个网址会发送很多个请求,收到很多个响应。

1.3.1 请求的详细信息解读

点开任意一个请求,可以看到一个请求由常规、请求头和响应头组成,下分别观察:
(1)常规:

请求 URL: https://cn.bing.com/
请求方法: GET
状态代码: 200 
远程地址: 202.89.233.100:443
引用站点策略: strict-origin-when-cross-origin

常规包含了一些常规信息。
其中,访问bing的请求方法为GET,还有另一种常用的请求方式为POST,对比如下:

GETGET中请求参数包含在URL里,请求页面,并返回页面内容,且请求提交的数据有限
POST多用于表单的提交,提交的数据不会包含在URL里,包含在请求体中

其中,状态代码表示服务器的响应状态,200带表成功处理。
(2)请求头
请求头说明了服务器要使用的附加信息

:authority: cn.bing.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
cookie: _EDGE_V=1; MUID=1B1D40B260906E19363E50D961BE6F85; MUIDB=1B1D40B260906E19363E50D961BE6F85; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=1ED583C34E5B4EB4B0C2F5372CB34A83&dmnchg=1; ANON=A=0F463C4798D3D7C344F4C6C4FFFFFFFF; _tarLang=default=zh-Hans; _TTSS_OUT=hist=WyJlbiIsInpoLUhhbnQiLCJ6aC1IYW5zIl0=; ABDEF=V=13&ABDV=11&MRNB=1628057135270&MRB=0; _EDGE_S=SID=3428D4C61122692D059FC44C106168AB; WLS=C=c31770f3f3ab3a26&N=%e4%bd%b3%e7%a0%94; SRCHUSR=DOB=20210705&T=1628135180000; SNRHOP=I=&TS=; _U=1e7kkhRxQ2Sv1XMoijsStJMs8Br5qqKqM4xL14bXYgR61U28ncPwaWNi8OvwvdyyMG2KI7a7tMc4u-91RH77oHPk4IJmd9nPROe6WjhVtsgsKRZGyoB17cJAsS5NsqD3DIkb0Izl8FGSNUQc_tpXLHNg6gNSKNjYQT4q2OFl7tcBOSz3uWBtt_jw6s0RlGZJFTYmreRk3nPpeQjsGUDqBxA; _SS=SID=3428D4C61122692D059FC44C106168AB&bIm=476476; ipv6=hit=1628143708634&t=4; SRCHHPGUSR=SRCHLANG=zh-Hans&BZA=0&BRW=NOTP&BRH=M&CW=814&CH=775&SW=1500&SH=1000&DPR=2.200000047683716&UTC=480&DM=0&EXLTT=31&HV=1628140109
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Microsoft Edge";v="92"
sec-ch-ua-arch: "x86"
sec-ch-ua-full-version: "92.0.902.62"
sec-ch-ua-mobile: ?0
sec-ch-ua-model: ""
sec-ch-ua-platform: "Windows"
sec-ch-ua-platform-version: "10.0"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: none
sec-fetch-user: ?1
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62
x-client-data: eyI0IjoiNzY2MTU5NzUwMjM3MTU2MjAzMyIsIjUiOiJcImVocGdqVlBZMHR6UU8rendLYkdOaHJRWkRQSDlyUTlhNHpJQkx1Y3FldlE9XCIiLCI2Ijoic3RhYmxlIiwiNyI6IjY0NDI0NTA5NDQwNCJ9
已解码:
message ClientVariations {
  {"4":"7661597502371562033","5":"\"ehpgjVPY0tzQO+zwKbGNhrQZDPH9rQ9a4zIBLucqevQ=\"","6":"stable","7":"644245094404"}
}

其中,acctpt请求报头域,指定用户可以接受哪些信息,
accept-language为客户端可接受的语言类型,accept-encoding为客户端可接受的内容编码,还有其他参数。
(3)响应头

accept-ch: Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform-Version, Sec-CH-UA-Platform, Sec-CH-UA, UA-Arch, UA-Full-Version, UA-Mobile, UA-Model, UA-Platform-Version, UA-Platform, UA
cache-control: private, max-age=0
content-encoding: br
content-length: 45981
content-type: text/html; charset=utf-8
date: Thu, 05 Aug 2021 05:08:45 GMT
nel: {"report_to":"network-errors","max_age":604800,"success_fraction":0.01,"failure_fraction":1.0}
p3p: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
report-to: {"group":"network-errors","max_age":604800,"endpoints":[{"url":"https://aefd.nelreports.net/api/report?cat=binghp"}]}
set-cookie: SNRHOP=I=&TS=; domain=.bing.com; path=/; secure; SameSite=None
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: Accept-Encoding
x-cache: CONFIG_NOCACHE
x-msedge-ref: Ref A: C95159E8DB6B4A13A2CB8EB894557725 Ref B: BJ1EDGE0813 Ref C: 2021-08-05T05:08:46Z
x-snr-routing: 1

其中date标识处理相应的时间,contnet-encoding指定响应内容的编码,content-type制定了文档类型,还有其他参数。

1.3.2 响应体

请求网站时,响应体就是网页的html代码,请求图片时,响应体就是图片的二进制数据,下图为bing的响应体截图,可以看到为html代码。
在这里插入图片描述

2. 网页基础

2.1 网页的组成

网页 CSS HTML JavaScript

HTML和CSS都非常熟悉,了解下JavaScript。
可以说,JavaScript是用来使网页动起来的。

2.1.2 网页的结构

之前学过一些html,所以这快就略了。

3 爬虫的基本原理

获取网页
提取信息
保存数据
自动化程序

3.1 获取网页

即需要让我们像浏览器那样,通过编程构造一个请求,向服务器请求数据(HTTP请求),得到网页的源代码。

3.2 提取信息

获得源代码后,需要从源代码获得我们的数据,利用python的Beautiful Soup,pyquery,lxml等可以较为方便的提取网页信息。

3.3 保存数据

提取出的数据往往是大量的需要保存的,所以需要一个合理的存储方式,比较合理的方法就是存储到数据库中,比如MySQLMondoBD等。

3.4 自动化程序

编写健壮的程序,让程序自行爬虫。

3.5 对于JavaScript渲染网页

现在许多网页都是JavaScript渲染出来的,原有的html代码只是一个空壳,网页只是调用了app.js,用它来构建页面,所以说用一些常规的库爬取出的代码有可能和源代码不一样,这时候就需要Selenium,Splash这样的库来处理。

4 会话和Cookies

在百度百科中Cookies的定义:

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

会话的定义:

会话对象用来存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在会话对象中的变量不会消失。当会话过期或被放弃后,服务器将终止该会话

我的理解是Cookies和会话是解决动态网页无状态问题的方法。

无状态是指HTTP对事务处理没有记忆能力,向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,这个过程完全独立,服务器不会记录前后状态的变化。即意味着如果后续要处理前面的信息,则必须重新传一份(我觉得它很像开环控制系统和有反馈的控制系统)

为了解决这个问题,提出了会话和Cookies。会话用来保存用户的会话信息,Cookies保存了登陆的凭证。

服务器 会话 客户端 Cookies

当客户端第一次请求服务器时,服务器会返回一个响应头中带有set-cookie字段的响应给客户端(本文中响应头代码段就有),用来标记是哪一个用户。下一次请求该网站时,浏览器会把此Cookie放到请求头一起提交给服务器。Cookie携带了会话信息,可以判断相应对话来辨认用户状态
在成功登录某个网站时,服务器会告诉客户端设置哪些Cookies信息,这样在后续访问时就可以获得登录状态了。

  • Cookies属性结构
    在这里插入图片描述
    name:Cookie的名称
    valueCookie的值
    domain可以访问该Cookie的域名
    expires存在时间
    (注意,并不是浏览器关了会话就消失了)

5 代理

由于爬虫速度很快,可能会遇到同一IP频繁访问呗反爬虫的问题。使用代理可以隐藏真实的IP,在爬取过程中不断更换代理来达到更好爬取效果。

请求
请求
响应
响应
客户端
代理服务器
Web服务器

有关代理的资料

6 今日总结

今天通过学习基本了解了服务端和客户端的交互过程,在下一篇中,我会对爬虫的初步程序进行总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eric_accept

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值