基本概念

任何一个整日泡在网上的人都会告诉你,网上有许多有用的信息。在平时你可能通过谷歌、百度、搜狗等搜索引擎来寻找你想要的信息,在大部分时候你理所当然的找到了你想要的信息,但仍然会有那么一两次个别情况:你想找一个pdf文件,而这个文件在很多网站上都不允许下载或者需要收取一定的费用才可以下载。当然,聪明的你肯定会想,难道我不会去找免费的资源吗。这当然可以,可是,正如开头所说,网上有很多信息,你并不会每次都能一下子找到有免费资源的那个网站,而一个个网站的找下去实在不算是明智之举,这时候一个可以自动帮你查找指定文件的网络爬虫就可以派上用场了。
一个简单的爬虫并不难实现,你只需要拥有百度、复制、粘贴这三样东西即可。但是如果想自己实现一个爬虫,你需要先了解爬虫的基本原理。我们平时在使用浏览器访问网页的过程可以理解成以下过程:
客户端在获取到网页源码后通过浏览器进行解析渲染就有了我们看到的网页的模样。而爬虫就是通过获取一个网页里面的全部链接,再获取对应的网络源码,再获取链接,知道找到一个链接是指向你想要的文件的为止。看起来挺无脑的对吧,那只是看起来,实际上我们可以通过代码编写爬虫的逻辑来判断文件是否是你想要的文件。
了解了基本原理,接下来就开始正文了。

爬虫礼仪

在使用爬虫抓取网页的时候应该注意一些细节:

尊重 robots.txt 文件

大多数网站在其根目录都有 robots.txt 文件,这个文件里面包含了对爬虫程序的指示。如果网站的拥有者不希望让他人抓取和索引某些网页,他就会在这个文件中列出这些网页和目录,那么有绅士风度的爬虫就会满足他的要求。这个文件的格式很简单,如下所示:

  1. User-agent: *
  2. Disallow: /examples/
  3. Disallow: /private.html

robots.txt 文件指明了爬虫程序(User-agent:*)不可以爬取 /examples/ 文件夹中的任何网页,也不可以访问 private.html 网页。robots.txt 文件时网站限制访问某些网页的标准机制。如果你想让你的爬虫在所有网站上都受欢迎,那最好遵守这些规则,否则你的ip有可能会被相关网站封禁,而这将会使你无法访问对应网站(除非更换ip)。

控制爬虫请求信息的速度

大多数网站拥有者可以接受每秒大约请求十个网页——虽然远远超过人工请求的数量,但不会使服务器瘫痪。再者,你可以用 Python 中的sleep()函数对访问速度进行约束。

不要随意伪造你的用户代理身份

网站主要通过用户代理身份来识别访问者。由于很多网站根本不允许爬虫访问或抓取他们的网页,因此一些爬虫编写者给机器人一个假的用户代理身份,使其看起来像一个正常的网络浏览器。但这并不值得炫耀。你可能永远不会被发现,但这是一个关于尊重的问题——如果你有希望保密的网页,你也同样会希望其他人尊重你的意愿。其他网站的拥有着也是一样。这只是作为一名优秀的爬虫编写者和网民的义务之一。你可能会出于某些目的冒充一个浏览器的用户代理,比如做网站测试或从网站中查找并下载文件,但不应该是为了爬取信息。

获取网页源码

获取网页源码的库有很多,我比较习惯于用requests这个第三方库来进行网络请求。

安装

  1. pip install requests

使用

import requests

解析网页源码

找到需要的资源