1.urlopen参数设置

 

urlopen(url, data, timeout)

 


 

import urllib

 

import urllib2

 

 

 

url = 'http://www.server.com/login'

 

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()

 


 


 

2.代理设置

 

(1)import urllib2

 

enable_proxy = True

 

proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})

 

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)

 


 

(2) import urllib2

 

import time

 

import re

 

f = open('logging01', 'w')

 

proxies = {'http':'http://117.89.152.52:8090'}

 

for i in range(50):

 

num = i+1

 

f.write('page'+str(num)+'\n')

 

while True:

 

urllib2.ProxyHandler(proxies)

 

url = 'http://club.jd.com/productpage/p-2121097-s-0-t-3-p-%u.html'%i

 

response = urllib2.urlopen(url)

 

content = response.read().decode('GB2312','ignore').encode('utf-8')

 

title = re.findall('"content":"(.*?)","creationTime":"',content)

 

if content=='':

 

time.sleep(10)

 

if not str(content)=='':

 

# print title

 

for j in title:

 

if 'div' in j:

 

continue

 

print j

 

f.write(str(j)+'\n')

 

break

 


 

f.close()

 

3)假如要设置多个代理,做法

 

4)这里要注意的一个细节,使用 urllib2.install_opener() 会设置 urllib2 的全局 opener 。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等。比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener open 方法代替全局的 urlopen 方法。

 

(5)pythonopenerbuild_openenr , urlopen opener open 方法的区别

 

4.使用 HTTP PUT DELETE 方法

 


 

http协议有六种请求方法,get,head,put,delete,post,options,我们有时候需要用到PUT方式或者DELETE方式请求。

 


 

PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUTPOST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。

 

DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazonS3云服务里面就用的这个方法来删除资源。

 

如果要使用 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)

 


 

5.爬虫在什么时候会用到异常处理方面的知识呢?

 

1.urlopen参数设置

urlopen(url, data, timeout)


import urllib

import urllib2