Python 2.7标准库中的urllib2以urlopen函数的形式提供了一个非常简单的接口,我们可以使用这个函数来获取网站内容,比如可以用它来做网络爬虫。当然Urllib2也同样提供一个比较复杂的接口来处理复杂情况,例如:基础验证、cookies、代理等。

基本使用

urlopen函数可以接受一个字符串类型url或者一个request对象。

正常的返回对象中主要有这几个方法。

read():获取网站全部html代码

info():获取meta-information信息,比如服务器发送的头headers信息。

geturl():获取真实打开的地址,通常可以识别网址是否设置跳转。这个urllib2会帮你完成,最后得到的是真实地址。

getcode():获取http返回代码。

1、直接打开url

import urllib2

response = urllib2.urlopen('https://zhangnq.com/')

html= response.read()

print html

2、request对象访问

import urllib2

url='https://zhangnq.com/'

req=urllib2.Request(url)

response=urllib2.urlopen(req,timeout=30)

html= response.read()

print html

这里urlopen指定timeout超时时间。

3、传递data参数

如果你需要发送数据到URL,比如用户登录,那么HTTP中这个经常使用POST请求发送。这个步骤通常在你提交一个HTML表单时由浏览器完成。在python程序里如何使用POST提交任意的数据?首先需要把data编码成标准格式,然后作为data参数传递给Request对象,最后提交。编码工作使用urllib中的urlencode方法来完成。

import urllib

import urllib2

url = 'https://zhangnq.com/'

values = {'username' : 'sijitao',

'password' : 'passw0rd'}

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

html = response.read()

print html

如果需要使用GET请求发送,那么把编码后的data数据和url相加再提交即可。

import urllib

import urllib2

url="http://www.baidu.com/"

data={}

data['wd']='site:blog.nbhao.org'

url_values=urllib.urlencode(data)

furl=url+'s?'+url_values

req=urllib2.Request(furl)

response = urllib2.urlopen(req,timeout=5)

html = response.read()

print html

4、异常处理

一般使用URLError这个异常。在没有网络连接或者服务器不存在的情况时,URLError异常一般会带有"reason"属性。在网址不存在或者其他服务器错误时,我们可以捕获URLError中的code属性。

import urllib2

url='https://zhangnq.com/'

req=urllib2.Request(url)

response = None

try:

response = urllib2.urlopen(req,timeout=5)

print response.getcode()

print response.geturl()

print response.info()

#print response.read()

except urllib2.URLError as e:

print e

if hasattr(e, 'code'):

print 'Error code:',e.code

#print e.read()

print e.geturl()

print e.info()

elif hasattr(e, 'reason'):

print 'Reason:',e.reason

except:

pass

finally:

if response:

response.close()

urllib2库的基本使用一般就这些。

获取网站状态举例

背景是如何让程序判断一个网址导航站(http://www.hostunion.net/)中网址是否正常。有了urllib2的基本使用和异常的处理,一般就可以解决。例子中使用了pickle模块,判断如果超过5次异常就删除网站。例子如下。

def webCheck(timeout=60):

result=sqlExecute("select id,url from websites where status = 3")

webCheck_pkl='data/webCheck.pkl'

try:

f=file(webCheck_pkl,'rb')

web_dict=pickle.load(f)

f.close()

except:

web_dict={}

l=[]

if result:

for row in result:

url='http://'+row['url']

req=urllib2.Request(url)

req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36")

response=None

try:

response=urllib2.urlopen(req,timeout=timeout)

#print "Url: %s\t%s" % (url,response.getcode())

try:

web_dict[row['id']]['result_code']

web_dict[row['id']]['fail_cnt']

except:

web_dict[row['id']]={}

web_dict[row['id']]['fail_cnt']=0

web_dict[row['id']]['result_code']=response.getcode()

web_dict[row['id']]['fail_cnt']=0

except urllib2.URLError as e:

if hasattr(e, 'code'):

print "Url: %s\t%s" % (url,e.code)

try:

web_dict[row['id']]['result_code']

web_dict[row['id']]['fail_cnt']

except:

web_dict[row['id']]={}

web_dict[row['id']]['fail_cnt']=0

web_dict[row['id']]['result_code']=e.code

web_dict[row['id']]['fail_cnt']=web_dict[row['id']]['fail_cnt']+1

if web_dict[row['id']]['fail_cnt']>=5:

l.append(row['id'])

elif hasattr(e, 'reason'):

print "Url: %s\t%s" % (url,'error')

try:

web_dict[row['id']]['result_code']

web_dict[row['id']]['fail_cnt']

except:

web_dict[row['id']]={}

web_dict[row['id']]['fail_cnt']=0

web_dict[row['id']]['result_code']=e.reason

web_dict[row['id']]['fail_cnt']=web_dict[row['id']]['fail_cnt']+1

if web_dict[row['id']]['fail_cnt']>=5:

l.append(row['id'])

except:

pass

finally:

if response:

response.close()

for key in l:

sql='update websites set status=1 where id=%s' % key

sqlExecute(sql)

#dump

f=file(webCheck_pkl,'wb')

pickle.dump(web_dict,f)

f.close()

参考网址:http://www.pythontab.com/html/2014/pythonhexinbiancheng_1128/928.html

python捕获屏幕的标准库_Python标准库urllib2的使用和获取网站状态举例相关推荐

  1. python的标识库和第三方库_Python 标准库、第三方库

    Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写.网络抓取和解析.数据连接.数清 ...

  2. python调用数学库_python 数学库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在寻找一个3d数学库在python或python绑定. 它需要处理旋转,平移 ...

  3. python的所有库_Python 常用库

    前言 之前重写了视频字符画处理的代码,然后这两天又在研究命令行和网络.读了一点开源工具的代码,越来越觉得有必要针对性地学习一下一些重要的基础库. 这里呢就列个小清单,把我认为有必要学习的库写一下. 带 ...

  4. python post与get的区别_Python Requests库 Get和Post的区别和Http常见状态码

    (1)   在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置在HTML HEADER内提交. (2)   GET方式提交的数据最多只能有1024 Byte,而P ...

  5. 机器学习 python 库_Python机器学习库

    机器学习 python 库 什么是机器学习? (What is Machine Learning?) As the web is immensely growing with each day, an ...

  6. python单词库_python 单词库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python官方教程的最后一个部分就是标准库概览,在这里我们浏览一下标准库,了解 ...

  7. python 数据分析 库_Python数据分析库

    python 数据分析 库 什么是数据分析? (What is Data Analytics?) Data is power. Insights acquired from data is the k ...

  8. python records库_Python Records库使用举例

    连接数据库 Records使用sqlalchemy的create_engine,DBAPI可以完全参照sqlalchemy文档 """PostgreSQL"&q ...

  9. python turtle画有趣的图形_Python turtle库绘制简单图形

    一.简介 Python中的turtle库是一个直观有趣的图形绘制函数库.turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形. 二.简单的图形列举 1.绘制4个不同 ...

  10. python爬取网页数据软件_python爬虫入门10分钟爬取一个网站

    一.基础入门 1.1什么是爬虫 爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序. 从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HT ...

最新文章

  1. 服务器linux系统支持php好,关于Linux服务器系统的七大优势,你知道几个?
  2. 工作总结的写作方法与要领
  3. 数据分析基于朴素贝叶斯的书籍评价信息分类
  4. 【EPS精品教程】史上最牛EPS说明文档大全(23个PDF文档)
  5. Spring MVC,Ajax和JSON第3部分–客户端代码
  6. myeclipse里使用fat jar生成可执行jar
  7. 一个由于springboot自动配置所产生的问题的解决
  8. 深入解读Docker底层技术cgroup系列(2)——cgroup的初始化
  9. 【图像去噪】基于matlab小波变换+Contourlet变换+PCA图像去噪【含Matlab源码 610期】
  10. 网络工程师必备工具之超级终端
  11. java基于ssm的学校教务管理系统的设计与实现论文
  12. 对ID3算法的理解及其优缺点
  13. 怎么把vob格式的视频转换成mp4格式
  14. Flann特征点匹配简述(Lowe's algorithm)
  15. sort()与拉姆达表达式
  16. Unity + PicoVr 360全景视频播放
  17. 计算机毕业设计ssm鹊巢大连分公司分销商管理系统51g9m系统+程序+源码+lw+远程部署
  18. 微信公众号数据2019_2019年4月房地产微信公众号排行榜:郑州楼市第一
  19. 印光大师、净空法师:法师、居士示现神通需注意哪些事项?
  20. 针对某个WEB渗透的整套修复建议(更新部分)

热门文章

  1. CMM---软件能力成熟度模型
  2. html input限制输入小数,限制input输入小数只能到3位或者只能输入正整数(兼容ios)...
  3. 网站虚拟主机是什么?(什么是虚拟主机空间)
  4. 运行IE显示“该文件没有程序与之关联来执行该操作”
  5. Python——类和对象、魔术方法(day07)
  6. usb gadget 端点halt的产生
  7. 深股通,沪股通,港股通
  8. Dynamics 365 On Premises V9.1千呼万唤始出来
  9. 2019第五届美亚杯全国电子数据取证大赛团队赛wp
  10. Fn按键失灵后的软件替代方案