参考书籍:《用 Python 写网络爬虫》
下载地址: http://download.csdn.net/detail/wangs0622/9921704
当然你也可以自己百度搜索下载。
一点感想
书看一遍是不够的,温故而知新。
下载一个网页源代码
最简单的形式
使用的是 python 自带的库 urllib2
import urllib2
def download(url):
print "downloading " , url
html = urllib2.urlopen(url).read()
return html
给定想要下载的 URL 即可下载其源代码。
添加处理异常的功能
当然很有可能在下载的过程中出现各种问题,导致出现问题,所以需要在上面的程序上扩展,处理异常的情况。
import urllib2
def download(url):
print "downloading " , url
try:
html = urllib2.urlopen(url).read()
except urllib2.URLErrors as e:
print "download error: " , e.reason
html = None
return html
完整的程序如下:
# _*_ encoding:utf-8 _*_
'''
Created on 2017年8月4日
@author: wangs0622
'''
import urllib2
def download(url):
print "downloading " , url
try:
html = urllib2.urlopen(url).read()
except urllib2.URLError as e:
print "download error: " , e.reason
html = None
return html
if __name__ == '__main__':
download('http://www.wangs0622.com/dex')
运行的结果如下:
downloading http://www.wangs0622.com/dex
download error: Not Found
添加重试下载功能
有的时候,下载出现了问题,可能是但是网络不好的原因,也有可能是页面不存在的原因,一般会返回 4xx 和 5xx 类型的错误代码。 最常见的莫过于 404,即表示网页未找到。(为什么网页为找到,使用的是 404 代码呢? 据说是有历史原因的,有兴趣的话可以去百度。)
正常情况下,返回 5xx 错误代码的话,是因为网络的原因,并不是网页不存在,这个时候,我们可以尝试重新下载这个网页,所以,就有了如下的改进版本。
import urllib2
def download(url, num_retries = 5):
'''
function: 下载网页源代码,如果遇到 5xx 错误状态,则继续尝试下载,知道下载 5 次为止。
'''
print "downloading " , 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:
return download(url, num_retries-1)
return html
一个有用的网站
一个有用的网站: http://httpstat.us/ 专门用来返回相应的网页返回代码。 例如 http://httpstat.us/404
小结
截止目前的 download() 函数已经具备健全的下载网页源代码的功能,可以应付一般情况下的使用了。
后面还需要介绍为 download() 函数添加代理和下载延时功能,之后再介绍 链接爬虫。我想法是在介绍这些功能的同时我们实践爬取一个网站。相信学爬虫的都是广大男士,后面实践爬取的网站是:http://www.mm131.com 我们的目标是将其中的图片下载下来。
网友评论