用python语言写的简易爬虫

时间:2022-07-30 20:38:36

我们日常生活中经常使用的搜索引擎就是一种网络爬虫。它们利用比较先进的算法和程序从服务器中爬取到用户所需要查找的信息。

笔者也研究过一段时间的网络爬虫,不过能力还不够。而且是刚开始用python写网络爬虫的旅程。了解过之后,发现用python写网

络爬虫要比java写网络爬虫更加简洁与方便。下面是我写的第一个python网络爬虫实例:

#coding=utf-8

import urllib2
import urllib

def download(url):
'''@url:需要爬取的网页地址'''
print 'Downloading:',url
html = urllib2.urlopen(url).read()'''此语句用于获得网页的html代码'''
urllib.urlretrieve(url,'f://download.html') '''此语句用于下载网页的html代码'''

'''调用download函数'''
download('http://www.taobao.com/')
由于用户在访问网页时,可能会出现一些错误代码。常见的有:

200:成功(以2开头的代码均成功)

302:重定向(目标暂时转移)

404:客户端错误,在服务器中找不到查找的资源或信息。(以4开头的均为客户端错误)

500:服务器内部错误。(以5开头的代码均为服务器端错误)

因此如果服务器内部出现了问题,那么我们可以再次访问,也许会访问到该网站。由于访问可能会出现错误,所以也需要进行异常处理。

代码实现如下:

#coding=utf-8

import urllib2
import urllib

def download(url,num_retries = 2):
''' 定义download函数
@url:为需要访问的网址
@num_retries:重新下载的次数
'''
print 'Download:',url
try: #处理异常
html = urllib2.urlopen(url).read() #可能发生异常的代码
except urllib2.URLError as e:
print 'Download error:',e.reason #输出错误信息
html = None #将html置空
if num_retries > 0:
'''hasattr用于判断错误信息e中是否有code字段'''
if hasattr(e,'code') and 500 <= e.code < 600:
return download(url,num_retries - 1)
urllib.urlretrieve(url,'f://download.html') #下载网页html代码

download('http://www.sina.com/') #调用函数