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)python中opener,build_openenr , urlopen 和opener 的 open 方法的区别
4.使用 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)
5.爬虫在什么时候会用到异常处理方面的知识呢?
1.urlopen参数设置
urlopen(url, data, timeout)
import urllib
import urllib2