Some in urllib2 - python2.7

1. urlopen可以给一个Request Object返回一个response object,read()读取相应对象的内容,这时候的print(the_page)可以输出网页的html内容

1 import urllib2
2
3 req = urllib2.Request(‘http://www.voidspace.org.uk‘)
4 response = urllib2.urlopen(req)
5 the_page = response.read()
6
7 print(the_page)

2. Request对象可以给server传输数据,还可以传输一些额外信息(metadata),如HTTP"headers"

3.如我们所知request可以用POST方式给server传输数据,这些数据可以通过标准方式进行编码之后进行传输,这里用了urlencode函数进行编码

 1 import urllib2
 2 import urllib
 3
 4 url = ‘http://www.someserver.com/cgi-bin/register.cgi‘
 5
 6 values = {‘name‘:‘Michael Foord‘,
 7           ‘location‘: ‘Northampton‘,
 8           ‘language‘: ‘Python‘
 9           }
10
11 data = urllib.urlencode(values)
12 req = urllib2.Request(url, data)
13 response = urllib2.urlopen(req)
14
15 the_page = response.read()

  当然也可以用GET模式来传输数据,默认没有加data参数的时候就是使用GET模式,实际上我们知道POST是将数据编码后打包发送,GET类似与将数据加在url的末尾进行传输

 1 import urllib2
 2 import urllib
 3
 4
 5 values = {‘name‘:‘Michael Foord‘,
 6           ‘location‘: ‘Northampton‘,
 7           ‘language‘: ‘Python‘
 8           }
 9
10 data = urllib.urlencode(values)
11 print(data) # encoded data
12
13 url = ‘http://www.example.com/example.cgi‘
14 full_url = url + ‘?‘ + data #use ‘?‘ to add data at the end
15 req = urllib2.Request(full_url)
16 response = urllib2.urlopen(req)
17
18 the_page = response.read()
19 print(the_page)

4.Headers

  一些服务器只提供给浏览器访问,而上面的方式默认以名字python-urllib/2.7进行访问,所以需要将自己“伪装”成浏览器的名字

 1 import urllib
 2 import urllib2
 3
 4 url = ‘http://www.someserver.com/cgi-bin/register.cgi‘
 5 user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘
 6
 7 values = {‘name‘ : ‘Michael Foord‘,
 8 ‘location‘ : ‘Northampton‘,
 9 ‘language‘ : ‘Python‘ }
10
11 headers = { ‘User-Agent‘ : user_agent }
12 data = urllib.urlencode(values)
13
14 req = urllib2.Request(url, data, headers)
15 response = urllib2.urlopen(req)
16 the_page = response.read()

5. URLError with a "reason" attribute

 1 import urllib
 2 import urllib2
 3 from urllib2 import URLError
 4
 5 req = urllib2.Request(‘http://www.pretend_server.org‘)
 6
 7 try:
 8     urllib2.urlopen(req)
 9 except URLError as e:
10     print e.reason

6. HTTPError with a "code" attribute, codes in the 100-299 range indicatesuccess, you will usually only see error codes in the 400-599 range.

 1 import urllib
 2 import urllib2
 3 from urllib2 import URLError
 4
 5 req = urllib2.Request(‘http://www.python.org/fish.html‘)
 6
 7 try:
 8     urllib2.urlopen(req)
 9 except urllib2.HTTPError as e:
10     print e.code
11     print e.read()

7. Two basic approaches

 1 #1
 2 from urllib2 import Request, urlopen, URLError, HTTPError
 3
 4 req = Request(someurl)
 5
 6 try:
 7     response = urlopen(req)
 8 except HTTPError as e:
 9     print ‘The server couldn\‘t fulfill the request.‘
10     print ‘Error code: ‘, e.code
11 except URLError as e:
12     print ‘We failed to reach a server.‘
13     print ‘Reason: ‘, e.reason
14 else:
15     print(‘everything is fine‘)
16
17 #2
18 from urllib2 import Request, urlopen, URLError
19
20 req = Request(someurl)
21 try:
22     response = urlopen(req)
23 except URLError as e:
24     if hasattr(e, ‘reason‘):
25         print ‘We failed to reach a server.‘
26         print ‘Reason: ‘, e.reason
27     elif hasattr(e, ‘code‘):
28         print ‘The server couldn\‘t fulfill the request.‘
29         print ‘Error code: ‘, e.code
30 else:
31     # everything is fine

8. Basic Authentication
  当需要认证的时候,服务器会发出一个header来请求认证,如WWW-Authenticate: Basic realm="cPanel Users",然后用户可以把用户名和密码作为一个header加在requese中再次请求.
一般不需要考虑格式范围的话可以直接用HTTPPasswordMgrWithDefaultRealm来设定某个URL的用户和密码

 1 from urllib2 import Request, urlopen, URLError
 2 import urllib2
 3
 4 #create a password manager
 5 password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
 6
 7 username = ‘Prime‘
 8 password = ‘Bee‘
 9
10 top_level_url = "http://example.com/foo/"
11 password_mgr.add_password(None, top_level_url, username, password)
12
13 handler = urllib2.HTTPBasicAuthHandler(password_mgr)
14
15 opener = urllib2.build_opener(handler)
16 opener.open(someurl)
17
18 # Install the opener, not necessarily
19 urllib2.install_opener(opener)

9. 设置socket的默认等待时间

1 import socket
2
3 timeout = 10
4 socket.setdefaulttimeout(timeout)

Some in urllib2 - python2.7,布布扣,bubuko.com

时间: 2024-09-29 23:30:39

Some in urllib2 - python2.7的相关文章

python2.7 urllib2访问https 网站出错

今天发现平时每小时报表内容少了好几个table ,感觉好奇怪,这个代码很稳定跑了好长时间了,不知道哪里出来问题,幸亏代码做了异常处理.否则我估计邮件都会发不出来了,看了下日志文件,有报错日志记录如下: ` page = urllib2.urlopen(url, timeout=300) File "/usr/local/lib/python2.7/urllib2.py", line 154, in urlopenreturn opener.open(url, data, timeout

python2.x urllib2和urllib的使用

1.最简单用法 urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,...) 1 import urllib2 2 import urllib 3 4 5 response = urllib2.urlopen("http://www.baidu.com") 6 7 print 'getcode():',response.getcode() 8 print 'geturl():',response.geturl()

python2.7 urllib2 爬虫

# _*_ coding:utf-8 _*_ import urllib2import cookielibimport randomimport refrom bs4 import BeautifulSoupimport datetime dax = datetime.datetime.now().strftime('%Y-%m-%d')print(dax) url = 'http://ww=singlemessage&isappinstalled=0' cj = cookielib.Cooki

Python2和Python3的一些语法区别

Python2和Python3的一些语法区别 python Python2和Python3的一些语法区别 1.print 2.input 3. python3版本相对2版本的部分其他区别 问题:为何会出现乱码的情况 问题:如何获取编码方式的信息? 问题:在控制台上看到的到底是什么? 1.print 在版本2的使用方法是: print 'this is version 2 也可以是 print('this is version 2') 但到了3,就只能加上括号,像一个函数一样来使用 print:

python2 与 python3的区别总结

python2 与 python3的区别总结 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作为输入,然后自动将其转换到Python 3的形式. 案例研究:将chardet移植到Python 3(porting chardet to Python 3)描述了如何运行这个脚本,然后展示了一些它不能自动修复的情况.这

爬虫之urllib2库的基本使用

urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urllib2. urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用) urllib2 官方文档:https://docs.python.org/2/library/urllib2.html urllib2 源码:https://hg.python.org/cpython/file/2.7/Lib/urllib2

python2.0_s12_day9_协程&Gevent协程

Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程:协程是一种用户态的轻量级线程.(操作系统跟不知道它存在),那你指定协程的实现原理是什么吗? 我们来聊聊协程的实现原理: 首先我们知道多个线程在一个单核CPU上进行并发,它的操作过程是,操作系统能调动的最小单位是线程,当操作系统触发多个线

python2.7.8安装

1.mkdir -p /usr/local/python && cd /usr/local/python && wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz && tar zxvf Python-2.7.8.tgz && cd Python-2.7.8 && ./configure --prefix=/usr/local/python &&a

cookielib和urllib2模块相结合模拟网站登录

1.cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用 本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送.coiokielib模块用到的对象主要有下面几 个:CookieJar.FileCookieJar.MozillaCookieJar.LWPCookieJar.其中他们的关系如下: 2.urllib2模块 说到urllib2模块最强大的部分绝对是它的o