澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

python的cookielib说明及实例实例,urllib常用操作

lz提醒一点,python3中urllib满含了py第22中学的urllib urllib2。[python2和python3的不同、调换及共存 - urllib]

urllib库

python内置的HTTP请求库

转自http://blog.csdn.net/seanliu96/article/details/60317333
<pre>
import urllib.request
import http.cookiejar
url = 'http://www.baidu.com'

cookielib介绍

python怎么着访谈互连网           用urllib包

怎么着扒网页?

八个模块:request,parse,error,rebotparser

宣称二个CookieJar对象

cookie = http.cookiejar.CookieJar()

I. 核心类

url 由三片段组成

先是有些:协议,http,https,ftp,file,ed2k   and so on

其次部分:贮存能源的服务器的IP地址大概域名,有的时候候会含有端口号,举例http的暗中认可端口号为80

其三部分:财富的具体地址,如目录或文件名称等

第风度翩翩局地://首盘部/第四盘部

实际便是依照UENVISIONL来收获它的网页音讯,即便大家在浏览器中看看的是生机勃勃幅幅精粹的画面,不过实际上是由浏览器解释才显示出来的,实质它是意气风发段HTML代码,加 JS、CSS。

一。request模块

伸手对象组成:url,参数,央浼头,诉求体四有个别。

response = urllib.request.urlopen(url,data=None,timeout,..)

response = urllib.request.urlopen(Request对象)

动用urllib库的HTTPCookieProcessor对象来成立cookie微处理机

handler = urllib.request.HTTPCookieProcessor(cookie)

Cookie

率先须要导入urllib包,然后使用U大切诺基Lopen方法拿到网页

假如把网页比作壹人,那么HTML就是她的龙骨,JS正是他的肌肉,CSS正是它的行头。所以最主要的部分是存在于HTML中的。

Request对象

urllib.request.Request(url,data,headers,method)

通过handler来构件opener

opener = urllib.request.build_opener(handler)

此类落成了Netscape and PRADOFC 2965 cookies定义的cookie标准,基本得以领略为某一条cookie数据。

import urllib.request

扒网页的栗子**
**py2:

data是作为央浼体实行传递的

data = bytes(utllib.parse.urlencode(map),'utf-8')

headers的片段本性:

User-Agent : 有个别服务器或 Proxy 会通过该值来推断是还是不是是浏览器发出的伸手

Referer:有的服务器会识别headers中的referer是或不是和煦

Content-Type : 在接受 REST 接口时,服务器会检查该值,用来规定 HTTP Body 中的内容该怎么解析。

application/xml : 在 XML RPC,如 RESTful/SOAP 调用时利用

application/json : 在 JSON RPC 调用时行使

application/x-www-form-urlencoded : 浏览器提交 Web 表单时接收在利用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会产生服务器谢绝服务

例如

headers={

    'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',

    'Referer':''

}

那边的opener方法同urllib的urlopen方法, 也能够先install_opener

response = opener.open(url)
for item in cookie:
print('name:%s nvalue:%s'%(item.name,item.value))
</pre>

把cookie内容写入文件
http.cookiejar.MozillaCookieJar(filename, delayload=None, policy=None)
A FileCookieJar that can load from and save cookies to
disk in the Mozilla cookies.txt file format (which is also used by the Lynx and Netscape browsers).
<pre>
import urllib.request
import http.cookiejar
url = 'http://www.baidu.com'
filename = 'cookies.txt'
mozilla_cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(mozilla_cookie)
opener = urllib.request.build_opener(handler)
request = urllib.request.Request(url)
reponse = opener.open(request)
print(reponse.read())
mozilla_cookie.save(ignore_discard = True,ignore_expires = True)

一些代码如下,超多性质是不是很精晓?

response = urllib.request.urlopen('')    #获取了指标

import urllib2
response = urllib2.urlopen("")
print response.read()

response对象

应者云集对象组成:状态码,响应头,响应中央

状态码,响应头,响应中央

response.status

response.getheaders()    /   response.getheaders("server")

response.read().decode('utf-8')    # 倘若不加decode,则赶回的是bytes类型的流

mozilla_cookie.load(filename,ignore_discard=True,ignore_expires=True卡塔尔国 从文件中载入 cookie内容

</pre>

        self.domain_initial_dot = domain_initial_dot
        self.path = path
        self.path_specified = path_specified
        self.secure = secure
        self.expires = expires
        self.discard = discard
        self.comment = comment
        self.comment_url = comment_url
        self.rfc2109 = rfc2109

html = response.read()   #读取数据

py3:

二。parse模块(URL解析和URL引用)

1.UTucsonL剖判:urlparse将url拆解深入分析成梯次零件和urlunparse将构件拼装成url

CookiePolicy

print(html)   #此地要求注意解码难点,那是二进制码,所以供给下一步的解码

from urllib import request

urlparse

urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)

# scheme内定合同项目,固然url中早已存在,则scheme不起功能

#allow_fragments为false时,fragment将为空,#后的剧情将前移至path中,假诺path之后的参数全为空

#URL组成

URL:scheme://netloc/path;parameters?query#fragment

此类的第百分之十效是收发cookie,即确定保证准确的cookie发往对应的域名,反之相近。

html = html.decode('utf-8')

response = request.urlopen("")

urljoin

将左右七个url进行拼接,每一个url分成6个部分,后边那多少个参数会被细分后会填充前边那么些参数中分割后子虚乌有的格外部分,双方皆有的话,将从前者为准

urljoin('')

>>>''

DefaultCookiePolicy

print(html)

print(response.read().decode())

urlencode

将字典转为query的款型

from urllib.parse import urlencode

params = {

    'name' :'tim',

    'age' :23

}

print(urlencode(params))

>>> name='tim'&age=23

该类完结了CookiePolicy的接口。

换八个网址,python卡死了

真正的程序就两行,运营结果:

urlunparse

将url的6个部分拼接成url

data = {'','',...}

CookieJar

地方的urlopen参数能够流传一个request诉求,它实际正是二个Request类的实例,布局时索要传入Url,Data等等的剧情。

澳门新浦京娱乐场网站 1

三。error模块

由request发生。重要设有五个类:U传祺LError,HTTPError(世襲U奔驰G级LError)

URLError属性:reason

HTTPError属性:code,reason,headers

CookieJar是cookie的集纳,能够包罗有大多Cookie类,是大家的着重操作对象。里面有风华正茂类别的办法能够支持越来越精心的操作!

import urllib.request

Note:

四。rebotparser模块

用来拆解深入分析robots.txt文件,一时用。

五。高档用法

  1. Opener

当你拿走三个UWranglerL你使用二个opener(二个urllib2.OpenerDirector的实例卡塔尔(قطر‎。在前面,大家都是使用的暗中认可的opener,也便是urlopen。它是叁个独特的opener,能够明白成opener的三个特殊实例,传入的参数仅仅是url,data,timeout。

万意气风发我们供给用到Cookie或然Proxy,只用那几个opener是不可能达到目标的,所以我们须要创建更雷同的opener来达成对Cookie和Proxy的安装。

  1. proxy代理

import urllib.request

proxy_handler = ProxyHandler({'http':')

opener = build_opener(proxy_handler)

response = opener.open('http://..')

  1. Cookielib

主要用以提供可存款和储蓄的cookie对象。能够选用本模块的CookieJar类的对象来捕获cookie并在一而再一而再再而三连接须要时再次发送。能够经过F12->Application->Cookies中查阅

CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

import http.cookiejar

#宣示一个CookieJar对象实例来保存cookie

cookie = http.cookiejar,CookieJar()

#使用urllib库request模块的HTTP库克ieProcessor对象来创设cookie微机

handler=urllib.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#此间的open方法同urllib2的urlopen方法,也能够流传request

response=opener.open('')

for item in cookie:

    print'Name = ' item.name

    print'Value = ' item.value

采用MozillaCookieJar和LWP库克ieJar能够将cookie保存到文件中,使用save来囤积,使用load来加载。

#设置保存cookie的公文,同级目录下的cookie.txt

filename='cookie.txt'

#声圣元(Beingmate卡塔尔(英语:State of Qatar)(Dumex卡塔尔个MozillaCookieJar对象实例来保存cookie,之后写入文件

cookie=http.cookiejar.MozillaCookieJar(filename)

#应用urllib2库的HTTPCookieProcessor对象来创设cookie微机

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#创建三个伸手,原理同urllib2的urlopen

response=opener.open("")

#保存cookie到文件

cookie.save(ignore_discard=True,ignore_expires=True)

使用load来加载cookie文件到cookie

cookie = http.cookiejar.MozillaCookieJar()

cookie.load(filename,ignore_discard=True,ignore_expires=True)

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通过handler来构建opener

opener=urllib.request.build_opener(handler)

#创设二个倡议,原理同urllib2的urlopen

response=opener.open("")

FileCookieJar

req = urllib.request.Request('')

response = urllib.request.urlopen(req)

  1. urllib是干嘛的:The urllib.request module defines functions and classes which help in opening UEscortLs (mostly HTTP卡塔尔(英语:State of Qatar) in a complex world — basic and digest authentication, redirections, cookies and more.

此类世襲自CookieJar,CookieJar只是在内部存款和储蓄器中成就本人的生命周期,FileCookieJar的子类能够达成多少悠久化,定义了save、load、revert多个接口。

html = response.read()

2. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False卡塔尔(英语:State of Qatar):注重部分是再次回到值, 这几个函数重返贰个 http.client.HTTPResponse 对象, 这一个指标又有各样方法, 比方我们用到的read(卡塔尔(قطر‎方法。还应该有此外措施:geturl(卡塔尔(قطر‎、info(卡塔尔、getcode(卡塔尔(英语:State of Qatar)。

MozillaCookieJar & LWPCookieJar

cookie 那玩意儿2跟3本子不太雷同啊

import urllib

import http.cookiejar

#扬言二个CookieJar对象实例来保存cookie

cookie = http.cookiejar.CookieJar()

#利用urllib的HTTPCookieProcessor对象来创立cookie微处理器

cookie=urllib.request.HTTPCookieProcessor(cookie)

#通过cookie来构建opener

opener = urllib.request.build_opener(handler)  #可以下方同一时候参加代理

#这里的open方法同urllib2的urlopen方法,也得以流传request

response = opener.open('')

for item in cookie:

print ('Name = ' item.name)

print ('Value = ' item.value)

  1. response.read(卡塔尔(قطر‎要decode才具健康展现html内容,不然会是title="xe7x99xbexe5xbaxa6xe6x90x9cxe7xb4xa2"实际不是title="百度查寻"了

多少个落到实处类,世襲关系如下:

4. response.read(卡塔尔(英语:State of Qatar)只可以运转贰遍就到结尾了,再度读取总是空值!
深入分析这两行代码

MozillaCookieJar & LWPCookieJar

先是行调用的是urllibCurry面包车型客车urlopen方法,传入七个U揽胜L,那个网站是百度首页,左券是HTTP合同,当然你也得以把HTTP换做FTP,FILE,HTTPS 等等,只是意味着了风流倜傥种访谈调控合同。

澳门新浦京娱乐场网站 2

urlopen日常选拔八个参数,它的参数如下:
urlopen(url, data, timeout) 率先个参数url即为U奥迪Q3L,第三个参数data是访谈URAV4L时要传送的数据,第多少个timeout是设置超时时间。
第二多个参数是足以不传递的,data默以为空None,timeout默感到socket._GLOBAL_DEFAULT_TIMEOUT。
先是个参数U宝马X3L是应当要传递的,在此个例子里面大家传递了百度的U凯雷德L,实行urlopen方法之后,再次回到多少个response对象,重回音讯便保存个中。
response.read() response对象有二个read方法,能够回到获取到的网页内容。

II. 使用

http://blog.csdn.net/pipisorry/article/details/47905781

大概例子

 

生龙活虎段轻松的接收代码

构造Requset 骨子里下面的urlopen参数能够流传二个request央求,它事实上正是一个Request类的实例,布局时须要传入Url,Data等等的剧情。

#!/usr/bin/env python
# encoding: utf-8

譬喻说上边包车型地铁两行代码,大家可以如此改写
import urllib2 
request = urllib2.Request("")
response = urllib2.urlopen(request)
print response.read()

import requests
import cookielib

py3:

url = ''
jar = cookielib.LWPCookieJar('cookie.txt')

import urllib.request

# 试着载入cookie
# 提叁个主题材料,为啥要参与ignore_discard属性?
try:
    jar.load(ignore_discard=True)
except:
    pass

 

# 建设构造多个session
s = requests.Session()

request = urllib.request.Request("")

# 设定 headers与cookies
s.headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36'}
s.cookies = jar

response = urllib.request.urlopen(request)

# 访问url
r = s.get(url)

print(response.read().decode())

# 持久化cookie
jar.save(ignore_discard=True)

运维结果是截然大器晚成致的,只可是中间多了二个request对象,推荐大家这么写,因为在营造伏乞时还亟需参预过多内容,通过创设二个request,服务器响应央浼获得回应,那样显得逻辑上清晰明显。
http://blog.csdn.net/pipisorry/article/details/47905781

# 打印cookie
for item in jar:
    print "cookie name : %s ---- value: %s" % (item.name, item.value)

多少传送POST和GET 地点的顺序演示了最宗旨的网页抓取,然则,以往好些个网址都以动态网页,须求您动态地传递参数给它,它做出相应的响应。所以,在探问时,大家须要传递数据给它。最何奇之有的处境正是登陆注册的时候。
把数量顾客名和密码传送到三个UPAJEROL,然后您拿走服务器管理未来的响应

咱俩获取如下cookie

多少传送POST和GET三种艺术及界别 最器重的区分是GET方式是直接以链接格局拜会,链接中带有了全数的参数,当然如若带有了密码的话是豆蔻梢头种不安全的抉择,可是你能够直观地见到本身提交了什么样内容。POST则不会在网站上显得全体的参数,可是倘令你想间接查看提交了怎么就不太方便了,可以酌情接纳。
POST**方式:** 上边说的data参数就是用在这里间的,大家传递的数目正是以此参数data。
import urllib
import urllib2
 
values = {"username":"1016903103@qq.com","password":"XXXX"}
data = urllib.urlencode(values) 
url = ""
request = urllib2.Request(url,data)
response = urllib2.urlopen(request)
print response.read()
我们引进了urllib库,今后大家模拟登录CSDN,当然上述代码也许登入不进来,因为还要做一些设置底部header的干活,或然还会有一点点参数未有安装全,还没曾谈到到在那就不写上去了,在那只是表达登陆的原理。我们要求定义三个字典,名为values,参数作者设置了username和password,上边接纳urllib的urlencode方法将字典编码,命名字为data,创设request时传出三个参数,url和data,运路程序,就能够完毕登入,再次回到的就是登入后表现的页面内容。当然你能够和谐搭建三个服务器来测验一下。
GET**方式:** 至于GET情势大家得以一贯把参数写到网站上边,直接创设叁个带参数的U大切诺基L出来就可以。
import urllib
import urllib2
values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values) 
url = ""
geturl = url "?" data
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()
Note:你能够print geturl,打字与印刷输出一下url,开采实际上就是本来的url加?然后加编码后的参数

cat cookie.txt

[HTTP方法:GET 对比 POST]

#LWP-Cookies-2.0
Set-Cookie3: BAIDUID="2F5340B39928231AA09353CDAE3DA14D:FG=1"; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2083-07-09 16:27:51Z"; version=0
Set-Cookie3: BIDUPSID=2F5340B39928231AA09353CDAE3DA14D; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2083-07-09 16:27:51Z"; version=0
Set-Cookie3: H_PS_PSSID=14872_1457_14412_14509_14444_12826_10812_14430_12868_14871_12723_14962_14919_14902_15384_12095_13937_15963; path="/"; domain=".baidu.com"; path_spec; domain_dot; discard; version=0
Set-Cookie3: PSTM=1434892424; path="/"; domain=".baidu.com"; path_spec; domain_dot; expires="2083-07-09 16:27:51Z"; version=0
Set-Cookie3: BDSVRTM=0; path="/"; domain="www.baidu.com"; path_spec; discard; version=0
Set-Cookie3: BD_HOME=0; path="/"; domain="www.baidu.com"; path_spec; discard; version=0

[Python爬虫入门三之Urllib库的主题使用]

变动一个Cookie类

http://blog.csdn.net/pipisorry/article/details/47905781

大家由Cookie的概念能够大约的变通一条cookie

 

import cookielib

设置Headers 稍许网址不会允许程序直接用地方的点子开展访问,假诺识别失常,那么站点根本不会响应,所以为了完全模仿浏览器的专业,大家需求设置有个别Headers 的习性。

class Cookie:
    def __init__(self, version, name, value,
                 port, port_specified,
                 domain, domain_specified, domain_initial_dot,
                 path, path_specified,
                 secure,
                 expires,
                 discard,
                 comment,
                 comment_url,
                 rest,
                 rfc2109=False,
                 ):
         .....

开荒我们的浏览器(Chrome),调节和测验浏览器F12,张开互联网监听network,比方和讯登录之后,这么些页面包含了不可枚举的剧情,那个内容亦不是叁遍性就加载成功的,实质上是施行了许多次诉求,平常是首先央求HTML文件,然后加载JS,CSS 等等,经过一再号令之后,网页的龙骨和肌肉全了,整个网页的功效也就出去了。

# 初阶化一个cookie

澳门新浦京娱乐场网站 3
Note:上面的图是先点击name中的www.zhihu.com,再点headers才会现出。

def createCookie(name, value, domain, expires=None):
    return cookielib.Cookie(
        version=None,
        name=name,
        value=value,
        port='80',
        port_specified=True,
        domain=domain,
        domain_specified=True,
        domain_python的cookielib说明及实例实例,urllib常用操作。initial_dot=False,
        path='/',
        path_specified=True,
        secure=False,
        expires=expires,
        discard=False,
        comment=None,
        comment_url=None,
        rest=None,
        rfc2109=False
    )

拆分那几个乞求,我们只看风华正茂先是个央浼,你能够见见,有个Request UCR-VL,还大概有headers,下边就是response。那些头中富含了大宗是音信,有文件编码啦,压缩形式,央求的agent等等。
在那之中,agent正是呼吁的地点,若无写入央浼身份,那么服务器不料定会响应,所以能够在headers中安装agent,比如下边包车型客车事例,这一个事例只是表达了怎么样设置的headers,小友大家看一下设置格式就好。
import urllib  
import urllib2  

new_cookie = createCookie('phpgao', 'laogao', 'www.phpgao.com', '1434977736')

url = ''
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
values = {'username' : 'cqc',  'password' : 'XXXX' }  
headers = { 'User-Agent' : user_agent }  
data = urllib.urlencode(values)  
request = urllib2.Request(url, data, headers)  
response = urllib2.urlopen(request)  
page = response.read() 

# 插手到现存cookies

py3:

mycookie = cookielib.CookieJar()
mycookie.set_cookie(new_cookie)

import urllib.request

III. 扩大阅读

from urllib.parse import urlencode

cookielib和urllib2模块相结合模拟网址登陆

 

1.cookielib模块

URL_ROOT = r''

cookielib模块的重中之重功能是提供可存款和储蓄cookie的指标,以便于与urllib2模块同盟使用来拜谒Internet财富。举个例子能够行使本模块的CookieJar类的目的来捕获cookie并在再三再四连接须求时再也发送。coiokielib模块用到的靶子首要有上面几个:CookieJar、FileCookieJar、MozillaCookieJar、LWP库克ieJar。当中他们的关联如下:

 

澳门新浦京娱乐场网站 4
 
2.urllib2模块

values = {'username': '***, 'password': '&&&}

谈起urllib2模块最精锐的生机勃勃对绝对是它的opener,

data = urlencode(values).encode()

urllib2模块的 OpenerDirector 操作类。那是贰个拘禁超级多管理类(Handler)的类。而持有那些 Handler 类都对应管理相应的说道,也许特别效果。分别有上边包车型地铁拍卖类:

# print(type(data), data)

    BaseHandler
    HTTPErrorProcessor
    HTTPDefaultErrorHandler
    HTTPRedirectHandler
    ProxyHandler
    AbstractBasicAuthHandler
    HTTPBasicAuthHandler
    ProxyBasicAuthHandler
    AbstractDigestAuthHandler
    ProxyDigestAuthHandler
    AbstractHTTPHandler
    HTTPHandler
    HTTPCookieProcessor
    UnknownHandler
    FileHandler
    FTPHandler
    CacheFTPHandler

 

cookielib模块日常与urllib2模块协作使用,首要用在urllib2.build_oper(卡塔尔国函数中作为urllib2.HTTPCookieProcessor(卡塔尔的参数。

user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'

通过能够使用python模拟网址登陆。

# user_agent = r'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'

先写个得到CookieJar实例的demo:

headers = {'User-Agent': user_agent}

 1 #!/usr/bin/env python
 2 #-*-coding:utf-8-*-
 3
 4 import urllib
 5 import urllib2
 6 import cookielib
 7
 8 #收获库克iejar对象(存在本机的cookie音信)
 9 cookie = cookielib.CookieJar()
10 #自定义opener,并将opener跟CookieJar对象绑定
11 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
12 #设置opener,从此以后调用urlopen(卡塔尔(قطر‎时都会利用安装过的opener对象
13 urllib2.install_opener(opener)
14
15 url = ""   
16 urllib2.urlopen(url)

 

 

request = urllib.request.Request(URL_ROOT, data, headers)

下一场写个用POST方法来访谈网址的章程(用urllib2模拟一齐post进度):

response = urllib.request.urlopen(request)

 1 #! /usr/bin/env python
 2 #coding=utf-8
 3
 4 import urllib2
 5 import urllib
 6 import cookielib
python的cookielib说明及实例实例,urllib常用操作。 7
 8 def login():
 9     email = raw_input("请输入客户名:"卡塔尔(英语:State of Qatar)
10     pwd = raw_input("请输入密码:"卡塔尔国
11     data={"email":email,"password":pwd}  #登入客商名和密码
12     post_data=urllib.urlencode(data)   #将post音讯化成能够让服务器编码的章程
13     cj=cookielib.CookieJar()   #获取cookiejar实例
14     opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
15     #和蔼设置User-Agent(可用以杜撰获取,防止少数网址防ip注入)
16     headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}
17     website = raw_input('请输入网站:'卡塔尔(英语:State of Qatar)
18     req=urllib2.Request(website,post_data,headers)
19     content=opener.open(req)
20     print content.read()    #linux下没有gbk编码,只有utf-8编码
21
22 if __name__ == '__main__':
23     login()

 

细心那一个例子经过测量检验,发掘独有人人网和戏谑网之类的网址能够,而像支付宝,百度网盘,以致是大家高校的教务系统都必须要负众望登陆,就能够展现如下的报错新闻:

page = response.read()

Traceback (most recent call last):
  File "login.py", line 23, in <module>
    login()
  File "login.py", line 19, in login
    content=opener.open(req)
  File "/usr/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 405: Method Not Allowed

print(page)

莫不是那个网址在编写时不收受顾客端央求该措施,具体原因笔者也不知晓为什么。而且以此顺序不可能自动通过有验证码表明的网址,所以纯粹学习它的规律吧。

py3-2:

然后放一下用python模拟登陆的多少个示范(转自:

u = urllib.URLopener() # Python 3: urllib.request.URLOpener

#  -*- coding: utf-8 -*-
# !/usr/bin/python

u.addheaders = []

import urllib2
import urllib
import cookielib
import re

u.addheader('User-Agent', 'Opera/9.80 (Windows NT 6.1; WOW64; U; de) Presto/2.10.289 Version/12.01')

auth_url = ''
home_url = '';
# 登录顾客名和密码
data={
    "username":"nowamagic",
    "password":"pass"
}
# urllib举行编码
post_data=urllib.urlencode(data)
# 发送头新闻
headers ={
    "Host":"www.nowamagic.net",
    "Referer": ""
}
# 起头化叁个CookieJar来拍卖Cookie
cookieJar=cookielib.CookieJar()
# 实例化一个大局opener
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))
# 获取cookie
req=urllib2.Request(auth_url,post_data,headers)
result = opener.open(req)
# 访谈主页 自动带着cookie音讯
result = opener.open(home_url)
# 彰显结果
print result.read()

u.addheader('Accept-Language', 'de-DE,de;q=0.9,en;q=0.8')

1. 接收本来就有的cookie访谈网址

u.addheader('Accept', 'text/html, application/xml;q=0.9, application/xhtml xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1')

import cookielib, urllib2

f = u.open(url)

ckjar = cookielib.MozillaCookieJar(os.path.join('C:Documents and SettingstomApplication DataMozillaFirefoxProfilesh5m61j1i.default', 'cookies.txt'))

content = f.read()

req = urllib2.Request(url, postdata, header)

f.close()

req.add_header('User-Agent',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')

py3-3:

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) )

[python] view plain copy

f = opener.open(req)
htm = f.read()
f.close()

 print?

2. 探问网址获得cookie,并把得到的cookie保存在cookie文件中

  1. import urllib.request  

import cookielib, urllib2

  1. import http.cookiejar  

req = urllib2.Request(url, postdata, header)
req.add_header('User-Agent',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')

  1.      

  2. # head: dict of header  

ckjar = cookielib.MozillaCookieJar(filename)
ckproc = urllib2.HTTPCookieProcessor(ckjar)

  1. def makeMyOpener(head = {  

  2.     'Connection': 'Keep-Alive',  

  3.     'Accept': 'text/html, application/xhtml xml, */*',  

opener = urllib2.build_opener(ckproc)

  1.     'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3',  

f = opener.open(req)
htm = f.read()
f.close()

  1.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'  

ckjar.save(ignore_discard=True, ignore_expires=True)

  1. }):  

  2.     cj = http.cookiejar.CookieJar()  

  3.     opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))  

  4.     header = []  

  5.     for key, value in head.items():  

3. 运用钦点的参数生成cookie,并用这些cookie访谈网址

  1.         elem = (key, value)  

  2.         header.append(elem)  

  3.     opener.addheaders = header  

  4.     return opener  

import cookielib, urllib2

  1.      

  2. oper = makeMyOpener()  

  3. uop = oper.open('', timeout = 1000)  

cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
values = {'redirect':", 'email':'abc@abc.com',
          'password':'password', 'rememberme':", 'submit':'OK, Let Me In!'}
data = urllib.urlencode(values)

  1. data = uop.read()  

  2. print(data.decode())  

request = urllib2.Request(url, data)
url = urlOpener.open(request)
print url.info()
page = url.read()

Note

request = urllib2.Request(url)
url = urlOpener.open(request)
page = url.read()
print page

1. urllib.parse.urlencode(query, doseq=False, safe='', encoding=None, errors=None)

除此以外,补充一下urllib2的主意:

urllib.parse.quote_plus(string, safe='', encoding=None, errors=None)

1.geturl():

大假诺把三个起始的字符串, 转变为url格式的字符串。

本条再次来到获取的一步一个鞋的痕迹的U猎豹CS6L,这么些很有用,因为urlopen(只怕opener对象使用的卡塔尔国或者会有重定向。获取的UXC60L恐怕跟央求U途达L差异。

  1. py3中data参数是要拓宽任意编码(utf8...),不然现身错误TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.   python2.7 是 ascii,3.3 是utf-8,都以string类型,但socket (urllib等都以凭仗socket卡塔尔国 使用bytes,要经过encode(卡塔尔(قطر‎转变。

U汉兰达L重定向(UHavalL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某些网站时,将他导向到另三个网站的技能。常用在把朝气蓬勃串相当短的网站网站,转成很短的网站。因为当要传播某网址的网站时,常常因为网站太长,不佳回想;又有望因为换了网路的无需付费网页空间,网站又必定要转移,不知情的使用者还认为网站关门了。那时候就足以用网路上的转址服务了。这几个技艺使一个网页是可借由分歧的统一资源一定符(URL)连结。

  1. 注意URL_ROOT不可能编码,ULANDL_ROOT = URL_ROOT.encode(卡塔尔(قطر‎,不然会出错:unknown url type: b'http

>>> import urllib2
>>> url = ""
>>> req = urllib2.Request(url)
>>> response = urllib2.urlopen(req)
>>> response.geturl()
''
>>> print response.info()
Date: Fri, 28 Mar 2014 03:30:01 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=AF7C001FCA87716A52B353C500FC45DB:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: H_PS_PSSID=1466_5225_5288_5723_4261_4759_5659; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Expires: Fri, 28 Mar 2014 03:29:06 GMT
Cache-Control: private
Server: BWS/1.1
BDPAGETYPE: 1
BDQID: 0xea1372bf0001780d
BDUSERID: 0

这么,大家设置了贰个headers,在创设request时传出,在乞求时,就投入了headers传送,服务器若识别了是浏览器发来的伸手,就能获得响应。

咱俩得以由此urllib2 默许情形下会针对 HTTP 3XX 再次回到码自动进行 redirect 动作(U凯雷德L重定向卡塔尔(英语:State of Qatar),不供给人工配置。要检查评定是还是不是爆发了 redirect 动作,只要检查一下 Response 的 ULX570L 和 Request 的 U哈弗L 是还是不是黄金年代致就足以了。

应付防盗链 除此以外,大家还大概有对付"反盗链"的秘诀,服务器会识别headers中的referer是还是不是它和睦,假使不是,有的服务器不会响应,所以我们还足以在headers中踏向referer
诸如我们得以创设下边包车型客车headers
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  , 'Referer':'' }  
同地点的点子,在传递诉求时把headers传入Request参数里,那样就能够应付防盗链了。
headers**的部分性质须要非常注意一下** User-Agent : 有些服务器或 Proxy 会通过该值来决断是不是是浏览器发出的呼吁
Content-Type : 在选用 REST 接口时,服务器会检讨该值,用来规定 HTTP Body 中的内容该怎么解析。
application/xml : 在 XML RPC,如 RESTful/SOAP 调用时利用
application/json : 在 JSON RPC 调用时采纳
application/x-www-form-urlencoded : 浏览器提交 Web 表单时利用
在运用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会引致服务器谢绝服务
其它的有供给的可以查处浏览器的headers内容,在创设时写入相同的数额就能够。

import urllib2
my_url = ''
response = urllib2.urlopen(my_url)
redirected = response.geturl() == my_url
print redirected

http://blog.csdn.net/pipisorry/article/details/47905781

my_url = ''
response = urllib2.urlopen(my_url)
redirected = response.geturl() == my_url
print redirected

设置Proxy(代理)**
urllib2 默许会使用碰着变量 http_proxy 来设置 HTTP Proxy。要是三个网址它会检查评定某一段时间有个别IP 的拜望次数,假设访谈次数过多,它会禁绝你的访谈。所以你可以安装有个别代理服务器来帮忙您做工作,每间隔生龙活虎段时间换叁个代理,网址君都不知情是哪个人在搞鬼了! 代办的设置用法** import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : ')
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

Debug Log

设置**Timeout 
**urlopen方法第多个参数正是timeout的设置,能够设置等待多长期超时,为了消除部分网址实在响应过慢而引致的熏陶。
譬喻上边包车型地铁代码,要是第二个参数data为空那么要特意钦命是timeout是多少,写明形参,假若data已经传出,则无需申明。
import urllib2
response = urllib2.urlopen('', timeout=10)
import urllib2
response = urllib2.urlopen(', 10)

采取 urllib2 时,能够通过上边的法子把 debug Log 打开,那样收发包的开始和结果就能在显示屏上打字与印刷出来,方便调节和测验,有的时候能够节省抓包的做事

使用 HTTP 的 PUT 和 DELETE 方法**
**http协商有多样哀求方法,get,head,put,delete,post,options,大家有的时候需求使用PUT格局大概DELETE方式倡议。
PUT:这么些办法比相当少见。HTML表单也不援助这几个。本质上来说, PUT和POST极为相通,都以向服务器发送数据,但它们中间有八个重大分化,PUT平常内定了能源的存放地点,而POST则尚未,POST的数量存放地点由服务器自身调控。
DELETE:删除某贰个财富。基本上这几个也少之又少见,但是依旧有点地方举例amazon的S3云服务中间就用的那么些形式来删除财富。
倘使要使用 HTTP PUT 和 DELETE ,只可以利用十分低层的 httplib 库。即便这么,大家还可以经过上边包车型地铁办法,使 urllib2 能够发出 PUT 或DELETE 的伸手,可是用的次数实乃少,在此提一下。
import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT' # or 'DELETE'
response = urllib2.urlopen(request)

import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('')

使用DebugLog 能够通过下边包车型地铁不二等秘书技把 Debug Log 打开,那样收发包的剧情就能够在显示器上打字与印刷出来,方便调节和测量检验,那几个也不太常用,仅提一下
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('')

http://blog.csdn.net/pipisorry/article/details/47905781

 

 

Cookie的使用

用 Python 来报到网址, 用Cookies记录报到音讯, 然后就足以抓取登入之后技能看见的音信。

什么是**cookies?**

Cookie,指某个网址为了鉴定区别客户地方、实行session追踪而积存在客商本地终端上的数目(经常经过加密)。
譬如说有个别网址须求报到后工夫访谈有些页面,在登入早前,你想抓取有个别页面内容是不准的。那么大家得以选取Urllib库保存我们登入的Cookie,然后再抓取别的页面就达到目标了。
opener**的概念** 当您收获二个U中华VL你利用几个opener(叁个urllib2.OpenerDirector的实例卡塔尔(英语:State of Qatar)。在前头,大家都以利用的暗中同意的opener,也正是urlopen。

urlopen是二个非同一般的opener,可以理解成opener的叁个非正规实例,传入的参数仅仅是url,data,timeout。
若是我们须要用到Cookie,只用这一个opener是不能够完毕目标的,所以大家要求创制更相通的opener来落成对Cookie的设置。
Cookielib cookielib模块的首要性意义是提供可存款和储蓄cookie的对象,以便于与urllib2模块合作使用来做客Internet财富。Cookielib模块非常苍劲,大家得以选用本模块的CookieJar类的靶子来捕获cookie并在世襲连接央浼时再一次发送,举个例子能够兑现模拟登入作用。该模块首要的靶子有CookieJar、FileCookieJar、MozillaCookieJar、LWP库克ieJar。
它们的涉嫌:CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

利用cookie登陆的步子
1**
)获取Cookie保存到变量
**首先,大家先选取CookieJar对象达成获取cookie的成效,存款和储蓄到变量中,先来体会一下
import urllib2
import cookielib
#声称两个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()
#行使urllib2库的HTTPCookieProcessor对象来创制cookie微电脑
handler=urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#这里的open方法同urllib2的urlopen方法,也得以流传request
response = opener.open('')
for item in cookie:
    print 'Name = ' item.name
    print 'Value = ' item.value

py3:

import urllib.request

import http.cookiejar

 

URL_ROOT = r''

 

cookie = http.cookiejar.CookieJar() # 声明一(Wissu卡塔尔国(Karicare卡塔尔个CookieJar对象实例来保存cookie

handler = urllib.request.HTTPCookieProcessor(cookie) # 利用urllib2库的HTTP库克ieProcessor对象来创制cookie微处理机

opener = urllib.request.build_opener(handler) # 通过handler来构建opener

 

response = opener.open(URL_ROOT) # 此处的open方法同urllib2的urlopen方法,也得以流传request

 

for item in cookie:

print('Name = ' item.name)

print('Value = ' item.value)

我们应用上述办法将cookie保存到变量中,然后打字与印刷出了cookie中的值,运维结果如下
Name = YF-Page-G0

Value = dc8d8d4964cd93a7c3bfa7640c1bd10c

Note:py3中opener也能够那样使用:

request = urllib.request.Request(URL_ROOT, postdata, headers)

response = opener.open(request)

或者:

urllib.request.install_opener(opener)

request = urllib.request.Request(URL_ROOT, postdata, headers)

response = urllib.request.urlopen(request)

 

2)保存Cookie到文件 下边大家将cookie保存到了cookie这几个变量中,假如大家想将cookie保存到文件中该咋做吗?那个时候,大家将要用到FileCookieJar这一个指标了,在这里边我们利用它的子类MozillaCookieJar来兑现Cookie的保存

[python] view plain copy

 print?

  1. import cookielib  
  1. import urllib2  
  1.     

  2. filename = 'cookie.txt'  # 设置保存cookie的文本,同级目录下的cookie.txt  

  1. cookie = cookielib.MozillaCookieJar(filename)  # 声美赞臣(Meadjohnson卡塔尔个MozillaCookieJar对象实例来保存cookie,之后写入文件  

  2.     

  3. handler = urllib2.HTTPCookieProcessor(cookie)  # 利用urllib2库的HTTPCookieProcessor对象来创立cookie微处理机  

  4. opener = urllib2.build_opener(handler)  # 通过handler来构建opener  

  5. response = opener.open("")  # 创立一个倡议,原理同urllib2的urlopen  

  1.     

  2. cookie.save(ignore_discard=True, ignore_expires=True)  # 保存cookie到文件  

py3:

import urllib.request, urllib.parse, urllib.error

import http.cookiejar

 

URL_ROOT = ''

values = {'name': '******', 'password': '******'}

postdata = urllib.parse.urlencode(values).encode()

user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'

headers = {'User-Agent': user_agent}

 

cookie_filename = 'cookie.txt'

cookie = http.cookiejar.LWPCookieJar(cookie_filename)

handler = urllib.request.HTTPCookieProcessor(cookie)

opener = urllib.request.build_opener(handler)

 

request = urllib.request.Request(URL_ROOT, postdata, headers)

澳门新浦京娱乐场网站,try:

response = opener.open(request)

except urllib.error.URLError as e:

print(e.reason)

 

cookie.save(ignore_discard=True, ignore_expires=True) # 保存cookie到cookie.txt中

for item in cookie:

print('Name = ' item.name)

print('Value = ' item.value)

Note

  1. 不相同cookie写入文件情势的表达:

FileCookieJar(filename卡塔尔(قطر‎:创制FileCookieJar实例,检索cookie消息并将新闻存款和储蓄到文件中,filename是文本名。

MozillaCookieJar(filename卡塔尔:成立与Mozilla cookies.txt文件宽容的File库克ieJar实例。

LWPCookieJar(filename卡塔尔(قطر‎:创制与libwww-perl Set-库克ie3文件包容的FileCookieJar实例。

  1. save方法的三个参数的合法解释:

ignore_discard: save even cookies set to be discarded. 即便cookies将被舍弃也将它保存下来

ignore_expires: save even cookies that have expiredThe file is overwritten if it already exists.如果在该文件中cookies已经存在,则覆盖原著件写入

  1. python3中意气风发经直白采纳http.cookiejar.CookieJar(filename卡塔尔(قطر‎的不二秘籍会出错:self._policy._now = self._now = int(time.time()) AttributeError: 'str' object has no attribute '_now'。注意要将CookieJar改为LWP库克ieJar。

咱俩将那七个全体安装为True。运维之后,cookies将被封存到cookie.txt文件中,大家查阅一下剧情

澳门新浦京娱乐场网站 5

 3)从文件中获得库克ie并访谈 这正是说大家已经达成把Cookie保存到文件中了,若是之后想利用,可以行使下边包车型客车主意来读取cookie并访问网站,体会一下

[python] view plain copy

 print?

  1. import cookielib  
  1. import urllib2  
  1.     

  2. cookie = cookielib.MozillaCookieJar()  # 创设MozillaCookieJar实例对象  

  3. cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)  # 从文件中读取cookie内容到变量  

  4.     

  5. req = urllib2.Request("")  # 成立央浼的request  

  1. opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))  # 利用urllib2的build_opener方法创立四个opener  

  2. response = opener.open(req)  

  3. print response.read()  

py3:

import urllib.request

import urllib.parse

import urllib.error

import http.cookiejar

 

cookie_filename = 'cookie_jar.txt'

cookie = http.cookiejar.MozillaCookieJar(cookie_filename)

cookie.load(cookie_filename, ignore_discard=True, ignore_expires=True)

handler = urllib.request.HTTPCookieProcessor(cookie)

opener = urllib.request.build_opener(handler)

 

get_url = '' # 利用cookie央浼访谈另二个网站

get_request = urllib.request.Request(get_url)

get_response = opener.open(get_request)

print(get_response.read().decode())

[python3爬虫 - cookie登入实战]

考虑,假若大家的 cookie.txt 文件中保存的是某一个人登录百度的cookie,那么大家领到出这一个cookie文件内容,就可以用以上办法模拟这个人的账号登入百度。[Python爬虫入门六之Cookie的行使]

 

 

UOdysseyL错误管理

UGL450L错误状态码

urlopen会发出贰个HTTPError,对应相应的气象吧,HTTP状态码表示HTTP合同所重回的响应的图景。上面将状态码总结如下:

100:继续  客商端应当继续发送须求。顾客端应当继续发送供给的结余部分,或然只要伏乞已经做到,忽视这一个响应。

101: 调换公约  在出殡和安葬完那一个响应最后的空行后,服务器将会切换成在Upgrade 音信头中定义的这么些左券。唯有在切换新的磋商更有实益的时候才应该利用相似方式。

102:继续管理   由WebDAV(昂CoraFC 2518)扩展的状态码,代表拍卖将被继续施行。

200:央求成功      管理方式:得到响应的剧情,举办管理

201:需要完毕,结果是开创了新能源。新成立能源的UWranglerI可在响应的实业中拿到    管理方式:爬虫中不会遇上

202:须要被采用,但拍卖还未有完成    管理方式:拥塞等待

204:服务器端已经贯彻了伏乞,但是从未回来新的信 息。假如客商是客商代理,则不用为此更新自个儿的文书档案视图。    管理格局:遗弃

300:该状态码不被HTTP/1.0的应用程序直接运用, 只是当作3XX类型回应的暗中同意解释。存在多少个可用的被呼吁财富。    管理情势:若程序中可以见到管理,则举行特别管理,假诺程序中不可能管理,则吐弃
301:央浼到的财富都会分配三个世代的U君越L,那样就足以在今后由此该U路虎极光L来访谈此资源    管理格局:重定向到分配的UWranglerL

302:央求到的财富在三个不等的U帕杰罗L处有时保存     管理情势:重定向到不常的UHavalL

304:央求的财富未更新     管理方式:屏弃

400:不合法央浼     管理格局:抛弃

401:未授权     管理方式:甩掉

403:禁绝    管理格局:甩掉

404:未有找到     管理格局:扬弃

500:服务器内部错误  服务器遇到了多个从未预料的意况,以致了它超小概做到对诉求的拍卖。平日的话,这一个问题都会在劳动器端的源代码现身谬误时现身。

501:服务器不可能识别  服务器不扶助当前号令所急需的某部意义。当服务器无法辨认哀告的章程,並且不只怕支撑其对任何能源的伸手。

502:错误网关  作为网关或许代管事人业的服务器尝试举行需要时,从上游服务器收到到不行的响应。

503:服务出错   由于暂且的服务器维护大概过载,服务器当前相当的小概管理须求。那个情况是暂且的,并且就要少年老成段时间未来苏醒。

HTTPError实例发生后会有一个code属性,那正是是服务器发送的相干错误号。[Python爬虫入门五之U奔驰G级LError至极管理]

from:http://blog.csdn.net/pipisorry/article/details/47905781

ref:urllib — URL handling modules

本文由澳门新浦京娱乐场网站发布于www.146.net,转载请注明出处:python的cookielib说明及实例实例,urllib常用操作