网页qq抓取什么原理(技术层面上探究一下是如何工作的?(上))
优采云 发布时间: 2021-11-09 02:05网页qq抓取什么原理(技术层面上探究一下是如何工作的?(上))
大家好,我是月创。
通过前面的介绍,同学们已经了解了什么是爬虫,它的作用是什么。除了它的防攀爬和一些古怪的技能,接下来我们将开始在技术层面探索它是如何工作的。
在 Internet 上,公共数据(各种网页)使用 http(或加密的 http 或 https)协议传输。因此,我们这里介绍的爬虫技术都是基于http(https)协议的爬虫。
在Python模块的海洋中,支持http协议的模块相当丰富,既有官方的urllib,也有著名的社区(第三方)模块请求。它们都封装了http协议请求的各种方法,因此,我们只需要熟悉这些模块的用法即可,不再深入讨论http协议本身。
1. 了解浏览器和服务器
学生应该熟悉浏览器。可以说,上网过的人都知道浏览器。但是,了解浏览器原理的同学并不多。
作为一个想要开发爬虫的人,一定要了解浏览器的工作原理。这是您编写爬虫的必备工具,仅此而已。
面试的时候,不知道的同学有没有遇到过这么宽泛详细的回答:
这真是一道考验知识的题。有经验的程序员可以讲三天三夜没完没了,也可以提取几分钟精华,讲一讲。而小白们大概对整个过程一无所知。
无独有偶,对这个问题了解得越透彻,对写爬虫越有帮助。也就是说,爬行是一个考验综合能力的领域。那么,学生们准备好迎接这一全面的技能挑战了吗?
废话不多说,先从回答这个问题开始,了解浏览器和服务器,看看爬虫需要什么知识。
前面说过,这个问题可以讨论三天三夜,但是我们没有那么多时间。一些细节将被跳过。大致流程会和爬虫一起讨论,分为三部分:“强迫症或想认真补课的同学,同学们可以点击这里文章阅读”从进入网址到显示发生了什么的页面?
浏览器发送请求,服务器响应,浏览器收到响应 2. 浏览器发送请求
在浏览器地址栏中输入 URL,然后按 Enter。浏览器让服务器做一个网页请求,也就是告诉服务器我想看你的某个网页。
上面这短短的一句话,蕴藏着无数的奥秘,所以我不得不花一点时间来一一讲述。主要是关于:
2.1 URL 是否有效?
首先,浏览器必须判断您输入的网址(URL)是否合法有效。对应的URL,同学们并不陌生,http(s)开头的一长串字符,但是你知道它也可以ftp,mailto,file,data,irc开头吗?以下是其最完整的语法格式:
URI = scheme:[//authority]path[?query][#fragment]
# 其中, authority 又是这样的:
authority = [userinfo@]host[:port]
# userinfo可以同时包含user name和password,以:分割
userinfo = [user_name:password]
这是如何处理更生动的图片:
图片来自维基百科
越创经验:判断网址的合法性
在 Python 中,您可以使用 urllib.parse 执行各种 URL 操作
In [1]: import urllib.parse
In [2]: url = 'http://dachong:the_password@www.yuanrenxue.com/user/info?page=2'
In [3]: zz = urllib.parse.urlparse(url)
Out[4]: ParseResult(scheme='http', netloc='dachong:the_password@www.yuanrenxue.com', path='/user/info', params='', query='page=2', fragment='')
我们看到 urlparse 函数将 URL 解析为 6 个部分:
scheme://netloc/path;params?query#fragment
主要是netloc不等价于URL语法定义中的host
2.2 服务器在哪里?
上述 URL 定义中的主机是 Internet 上的服务器。它可以是IP地址,但通常就是我们所说的域名。域名通过 DNS 绑定到一个(或多个)IP 地址。
浏览器要访问某个域名的网站,首先要通过DNS服务器解析域名,获取真实IP地址。
这里的域名解析一般由操作系统来完成,爬虫不需要关心。但是,当你写一个大型爬虫,比如谷歌、百度搜索引擎爬虫时,效率就变得非常重要,爬虫必须维护自己的DNS缓存。
越创经验:大型爬虫需要维护自己的DNS缓存
2.3 浏览器向服务器发送什么?
浏览器已经获得了网站服务器的IP地址,可以向服务器发送请求。