php 爬虫抓取网页数据(技术层面上探究一下是如何工作的?(上))

优采云 发布时间: 2022-03-27 15:20

  php 爬虫抓取网页数据(技术层面上探究一下是如何工作的?(上))

  大家好,我是悦创。

  通过前面的介绍,同学们已经弄清楚了爬行动物是什么以及它的作用。除了它的反爬虫和一些古怪的技巧,让我们开始探索它在技术层面是如何工作的。

  

  在 Internet 上,公共数据(各种网页)使用 http(或加密的 http 或 https)协议传输。所以我们这里介绍的爬虫技术都是基于http(https)协议的爬虫。

  在 Python 模块的海洋中,支持 http 协议的模块相当丰富,包括官方的 urllib 和知名社区(第三方)的模块请求。它们都很好地封装了http协议请求的各种方法,所以我们只需要熟悉这些模块的用法,http协议本身就不再讨论了。

  1. 了解浏览器和服务器

  学生应该完全熟悉浏览器。可以说,上网过的人都知道浏览器。不过,了解浏览器各种原理的同学不一定很多。

  作为一个想开发爬虫的人,了解浏览器的工作原理是很有必要的。这是您编写爬虫的必备工具,仅此而已。

  不知道同学们在面试的时候有没有遇到这么一个很宏观很详细的回答问题:

  这真是一个考验知识的问题。有经验的程序员可以讲三天三夜,也可以抽出几分钟的精髓讲一讲。而新手们怕是对整个过程了解的不多。

  巧合的是,对这个问题了解得越多,对写爬虫的帮助就越大。也就是说,爬行是一个考验综合能力的领域。那么,学生们准备好迎接这一综合技能挑战了吗?

  废话不多说,先从回答这个问题开始,了解浏览器和服务器,看看爬虫需要哪些知识。

  前面说了,这个问题可以讨论三天三夜,但是我们没有那么多时间,所以就略过一些细节,结合爬虫说一下大致的流程,分为三个部分:“强迫症或那些想认真弥补它的人。同学们可以点击这个文章阅读“从输入url到页面显示是怎么回事?

  浏览器发出请求 服务器响应 浏览器收到响应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]

  处理的更形象的表示是这样的:

  

  图片来自维基百科

  跃创经验:判断URL的合法性

  在 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

  主要是在URL语法定义中netloc不等同于host

  2.2 服务器在哪里?

  上述 URL 定义中的主机是 Internet 上的服务器。它可以是IP地址,但通常是我们所说的域名。域名通过 DNS 绑定到一个(或多个)IP 地址。

  浏览器要访问某个域名的网站,首先要通过DNS服务器解析域名,获取真实IP地址。

  这里的域名解析一般由操作系统完成,爬虫不需要关心。但是,当你编写一个大型爬虫时,比如谷歌和百度搜索引擎,效率就变得非常重要,爬虫必须维护自己的 DNS 缓存。

  跃创经验:大型爬虫需要自己维护DNS缓存

  2.3 浏览器向服务器发送什么?

  一旦浏览器获得了网站服务器的IP地址,就可以向服务器发送请求。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线