1 先扒一个网页下来看看
import urllib2
response=urllib2.urlopen("http://www.baidu.com")
print response.read()
然后你就获得到了一个网页的源代码
response=urllib2.urlopen("http://www.baidu.com")
这个意思就是在urllib2库中访问urlopen函数,传入地址获取返回对象
urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, cafile=None, capath=None, cadefault=False, context=None)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
后面几个参数cafile、capath、cadefault参数:用于实现可信任的CA证书的HTTP请求。context参数:实现SSL加密传输。(基本上很少用)
第二三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT
第一个参数URL是必须要传送的,在这个例子里面我们传送了百度的URL,执行urlopen方法之后,返回一个response对象,返回信息便保存在这里面。
print response.read()
response.read()打印获取到的代码详情,response对象
2 urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容。比如上面的两行代码,我们可以这么改写
(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False):
request 的参数 header报头
import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()
这样代码清晰点
POST和GET请求
POST方式:
importurllib
importurllib2
values = {"username":"100010@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url ="https://www.baidu.com"
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
printresponse.read()
随便写了个假的,传参dada 就是你登录需要验证的信息 有些还有验证码什么的就另说了引入了urllib库对字典values进行了urlencode编码
字典的另一种定义方式 这样更好的看到每个参数
values={}
values['username']="10010@qq.com"
values['password']="XXXX"
GET方式:
get方式就是直接把参数拼接在请求地址后面就行
importurllib
importurllib2
values={}
values['username']="10010@qq.com"
values['password']="XXXX"
data=urllib.urlencode(values)
url="http://www.baidu.com"
geturl=url+"?"+data
request=urllib2.Request(geturl)
response=urllib2.urlopen(request)
printresponse.read()
很简单是吧
接下来是一些其他方面的应用
有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性。
在登录一个界面之后就会发现里面的样式什么的都变了,直接进入浏览器的调试模式,查看请求数据里面有许多的Request URL,还有headers,下面便是response,图片显示得不全,小伙伴们可以亲身实验一下。那么这个头中包含了许许多多是信息,有文件编码啦,压缩方式啦,请求的agent啦等等。
其中,agent就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以可以在headers中设置agent,例如下面的例子,这个例子只是说明了怎样设置的headers,小伙伴们看一下设置格式就好。这里agent就代表浏览器,我们伪造浏览器进行访问
importurllib
importurllib2
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()
这样我们就在进行请求的header里面加入了useragent
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 设置错误会导致服务器拒绝服务