【爬虫系列】(一)最简单的爬虫

首先,什么是爬虫?

网络蜘蛛(Web spider)也叫网络爬虫(Web crawler)[1],蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。(wiki)

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

爬虫就是在互联网中爬行的蜘蛛,它会遇到资源、选择资源、抓取资源,这个过程就是爬虫的全部。至于如何找到前进的路,如何选择路线,如何自我保护,如何穿过障碍,这些以后再慢慢说。现在我们先完成最简单的三步走,

  • 访问——通过网站域名获取HTML数据;
  • 分析——根据目标信息解析数据;
  • 存储——存储目标信息。

访问——如何建立网络连接

我们平时建立网络连接的方式通常是浏览器,浏览器是面向用户的。它创建信息的数据包,然后发送它们,获取网络的数据,然后解释成直观漂亮的声音、文字、图片、视频。但是,爬虫不需要这些花哨的功能,它只需要获得网络上的资源就可以了。

我们来看看这个简单的功能通过Python是如何实现的:

import urllib.request
response = urllib.request.urlopen('https://www.python.org')
print(response.read())
urlopen

你没有看错,这段代码只有三行,它的运行效果如下:

这段代码所做的是访问python的官网,获得网站页面的HTML数据,然后输出在控制台。可以看到,我们只是通过很简单的三行代码就得到了一个网页的页面内容。这个页面就是我们的爬虫所要搜寻的资源文件。利用python,很简单地我们就完成了这一步。

分析——找到我想要的东西

我们在上一步获得了资源,但是我们拿到的是HTML文件。对于浏览器而言,HTML文件很友好,因为浏览器的渲染是基于此的。对于爬虫来说(或者对于作为幕后黑手的我们来说),这样的资源信息冗余太多了,相当一部分都不是我们想要的内容。Python提供了很多的模块可以用来解析网页,我们这里先用一个最方便的——BeautifulSoup。

先简单使用一下BeautifulSoup模块,代码如下:

import urllib.request
from bs4 import BeautifulSoup

response = urllib.request.urlopen('https://www.zhihu.com')
bsObj = BeautifulSoup(response.read())
print(bsObj.h1)

这段程序的输出结果是

<h1 class="logo hide-text">知乎</h1>

也就是知乎网站的标题,我们可以用同样的方法访问网页中的任一结构。

存储——我的成果需要记录

我们做爬虫的目的不是为了让它自己去游荡,我们需要的是抓取的数据,所以必须把结果存储下来。常用的存储方式无非就是文件或者数据库方式。文件方式就是存为用户可直接查看的文件,比如文字信息存为文本,图片信息直接保存等等。当数据量很大,而且结构相对固定的时候,数据库就是一个很好的选择。Python也对各类数据库都有相应的支持,非常方便。

我们这里使用最简单的文本保存方式,如下

import urllib.request
from bs4 import BeautifulSoup

response = urllib.request.urlopen('https://www.python.org')

with open('test.txt','w+') as f:
    l = response.read().decode('utf-8')
    print(type(l))
    print(f.writable())
    f.write(l)

这段程序就是打开一个叫做text.txt的文本文档,然后把我得到的网页数据写进去。效果如下

到此为止,我们已经知道了如何设计爬虫——访问网络资源,解析数据,存储数据。

在后面的文章里,我会就这三个方面分别介绍python中的一些实用的库,以及其用法,中间会穿插一些简单的爬虫。

如果读者是在使用python2.7版本的话,我推荐大家去这个博客学习,这位博主的爬虫系列教程写的很是详细,应该可以帮助到大家。

posted @ 2016-12-12 11:55  郭娅祥  阅读(769)  评论(0编辑  收藏  举报