Python爬虫Urllib库的基本使用

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 设置错误会导致服务器拒绝服务

    原文作者:Master_K
    原文地址: https://www.jianshu.com/p/5db4ea12b708
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞