爬虫,初学者爬虫


urllib2模块
要想爬取网页,我们首先需要将其下载下来。下面的示例脚本使用Python的urllib 2 模块下载URL。

方法一:
import  urllib2
def  download1(url):#当传人参数URL时,该函数会下载网页并返回其HTML
  return  urllib2.urlopen(url).read()
 
调用:
print download1('http://example.webscraping.com')
 
当传入URL参数时, 该函数将会下载网页并返回其HTML。不过这个代码片段存在一个问题,即当下载网页时,我们可能会遇到一些无法控制的错误,比如请求的页面可能不存在。
 
方法二:
此时,urlli b2 会抛出异常,然后退出脚本。当出现下载错误时, 该函数能够捕获到异常, 然后返回None。
def download2(url):
    print 'downloading:',url
    try:
        html=urllib2.urlopen(url).read()
    except urllib2.URLError as e:
        print 'download error:',e.reason
        html=None
    return html
调用:
print download2('http://example.webscraping.com')
 
 
服务器 过载时返回的 503错误,我们可以尝试重新下载。
我们只需要确保download函数在 发生5xx 错误时重试下载即可。 下面是支持重试下载功能的新版 本代码。
 
 
方法3:
 
 
def download3(url,num_retries=2):#num_retries重新下载的次数,默认为2
    print 'download:',url
    try:
        html=urllib2.urlopen(url).read()
    except urllib2.URLError as e:
        print 'download error:',e.reason
        html=None
        if num_retries>0:
            if hasattr(e,'code')and 500<=e.code<600:#遇见5**错误码时,重新调用下载
                return download3(url,num_retries-1)
    return html
 当 download函数遇到5xx误码时,将会递归调用函数自身进行重试。 此外, 该函数还增加了一个参数, 用于设定重试下载的次数, 其默认值为两次。 我们在这里限制 网页下载的尝试次数, 是因为服务器错误可能 暂时还没有解决。想要测试该函数, 可以尝试下载http: //httpstat.us/500, 该网址会始终 返回500 错误码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值