# 一、爬虫简介

网络爬虫(又称为网页蜘蛛,网络机器人,在 FOAF 社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

# 二、网站 robots 协议

robots 是搜索引擎爬虫协议,也就是你网站和爬虫的协议。

** 简单的理解:**robots 是告诉搜索引擎,你可以爬取收录我的什么页面,你不可以爬取和收录我的那些页面。robots 很好的控制网站那些页面可以被爬取,那些页面不可以被爬取。

主流的搜索引擎都会遵守 robots 协议。并且 robots 协议是爬虫爬取网站第一个需要爬取的文件。爬虫爬取 robots 文件后,会读取上面的协议,并准守协议爬取网站,收录网站。

robots 文件是一个纯文本文件,也就是常见的.txt 文件。在这个文件中网站管理者可以声明该网站中不想被 robots 访问的部分,或者指定搜索引擎只收录指定的内容。因此,robots 的优化会直接影响到搜索引擎对网站的收录情况。

# 存放目录

robots 文件必须要存放在网站的根目录下。也就是 域名 /robots.txt 是可以访问文件的。你们也可以尝试访问别人网站的 robots 文件。 输入域名 /robots.txt 即可访问。示例:知乎

知乎的 robots 文件

# robots 写作语法
User-agent: Googlebot
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: Googlebot-Image
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: Baiduspider-news
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: Baiduspider
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: Baiduspider-render
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: Baiduspider-image
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-agent: bingbot
Disallow: /appview/
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Allow: /search-special
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
User-Agent: *
Disallow: /

user-agent 这句代码表示那个搜索引擎准守协议。user-agent 后面为搜索机器人名称,如果是 “*” 号,则泛指所有的搜索引擎机器人;案例中显示 “User-agent: *” 表示所有搜索引擎准守,* 号表示所有。

Disallow 是禁止爬取的意思。Disallow 后面是不允许访问文件目录(你可以理解为路径中包含改字符、都不会爬取)。案例中显示 “Disallow: /?s*” 表示路径中带有 “/?s” 的路径都不能爬取。 * 代表匹配所有。 这里需要主机。 Disallow 空格一个,/ 必须为开头。

如果 “Disallow: /” 因为所有路径都包含 / ,所以这表示禁止爬取网站所有内容。

如果没有被禁止到的路径,默认为可以被爬取。

# 关于 robots 的注意事项
  1. 不要禁止爬虫爬取网站的所有,因为从经验来看,如果屏蔽一次,解封后好一段时间爬虫都不会来你网站,收录成为问题。

  2. 代码后需要【冒号 + 空格 + 斜杆】 ,比如 “Disallow: /?

  3. 当网站为静态路径时,需要屏蔽掉所有动态链接。网站中存在一种链接被收录即可,避免一个页面 2 个链接。代码如下 “Disallow: /? ” 表示禁止所有带?号的网址被爬取。通常动态网址带有 “?”“=” 等。

  4. 根据自己网站情况定,屏蔽不需要收录的网址。

# 三、爬虫语言的选择

很多人提到爬虫就会想到 Python,其实除了 Python,其他的语言诸如 C,PHP,Java 等等都可以写爬虫,而且一般来说这些语言的执行效率还要比 Python 要高,但为什么目前来说,Python 渐渐成为了写很多人写爬虫的第一选择,简单总结了以下几点:

  • 开发效率高,代码简洁,一行代码就可完成请求,100 行可以完成一个复杂的爬虫任务;

  • 爬虫对于代码执行效率要求不高,网站 IO 才是最影响爬虫效率的。如一个网页请求可能需要 100ms,数据处理 10ms 还是 1ms 影响不大;

  • 非常多优秀的第三方库,如 requests,beautifulsoup,selenium 等等;

# 四、HTTP 请求类型

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

# 五、HTTP 状态码

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它 URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

所有的状态代码的取值一般在 100-599 之间,超出这个范围的响应状态码就不是标准的状态响应码了。所有的状态码可以分成 5 类:

  • 100–199:信息反馈(Informational responses);
  • 200–299:成功反馈(Successful responses),上面的代码的 200 status code 就属于这里;
  • 300–399:重定向消息(Redirection messages);
  • 400–499:客户端错误响应(Client error responses),这个区间包含了我们常见的 403 和 404 错误响应码
  • 500–599:服务器错误响应(Server error responses)

# 六、requests 中 get 与 post 的 headers 参数

在编写爬虫的过程中,有些网站会设置反爬机制,对不是来源于浏览器的访问进行拒绝,此时我们会收到 403 错误响应码,或者收到 “抱歉,无法访问 “等字眼,这就需要在爬虫程序中修改请求的 headers 伪装浏览器访问,从而绕开网站的反爬机制获取正确的页面。

# 1. 了解 requests 中 get 与 post 的 headers 参数
{
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.31.0", 
    "X-Amzn-Trace-Id": "Root=1-65373fd4-71bd6a663234e7c4749aa450"
  }
}

User-Agent: 用户代理(英语:User Agent)指的是代表用户行为的软件代理程序所提供的对自己的一个标识符。用于标识浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识

我们直接用 request 包,上来就调用 get 或者 post 方法,对方的服务器会根据我们发送的 **“User-Agent”: “python-requests/2.31.0”** 了解到,你是用 python 调用的 request 包来访问他们的服务器的。由于这种行为仅仅是消耗服务器资源带来成本,但是不会给对方带来任何好处(搜索引擎的爬虫除外),所以有一些网站会加入反爬机制,通过识别 headers 来拒绝对你的请求进行响应。

因此,我们需要在发送的请求中加入自定义的 headers,将我们的请求伪装成利用浏览器进行的请求。

# 2. 查看浏览器 headers 的常用方法

在浏览器的网页上:F12 打开检查 ——> Network ——> Doc ——> 在 Name 里找到对应的请求文件 ——> 在右边选择标头 标签页,找到 “请求标头”,就可以看到我们发送给服务器的 headers。

同理,服务器在发给我们信息的时候,也会发送 Headers。我们同样在上面的选择路径,可以看到 “Response Headers”。

我们可以查看到服务器响应返回的头信息知道响应结果的编码是 utf-8,有的还可以看到服务器所用是 apache 或是其他 web 服务器。

# 3.Headers 的解读
  1. User-Agent 的格式解读
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.61
  • Mozilla/5.0 (WindowsNT 10.0; Win64; x64):表示代理服务器的操作系统和版本。这里表示代理服务器是在 Windows 10 64 位操作系统上运行的。
  • AppleWebKit/537.36 (KHTML, like Gecko):表示代理服务器使用的浏览器引擎。这里表示代理服务器使用的是 AppleWebKit 引擎,它是一个开源的浏览器引擎,类似于 Gecko 引擎。
  • Chrome/118.0.0.0 Safari/537.36:表示代理服务器使用的浏览器版本。这里表示代理服务器使用的是 Chrome 浏览器版本 118.0.0.0,以及 Safari 浏览器版本 537.36。
  • Edg/118.0.2088.61:表示代理服务器使用的 Edge 浏览器版本。这里表示代理服务器使用的是 Edge 浏览器版本 118.0.2088.61。
  1. Cookie

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

转到 Python 网络爬虫(二)