爬虫中的网络请求

本文介绍了Python爬虫中的网络请求,讲解了http和https协议,以及get和post请求。详细阐述了内置库urllib的urlopen()、urlretrieve()、urlencode()和quote()等功能,并探讨了代理设置、Cookie的使用及其管理。同时,对比了urllib与第三方库requests的便捷性,展示了requests库中get和post请求的使用,以及如何处理代理和SSL证书问题。
摘要由CSDN通过智能技术生成

http协议:超文本传输协议,是一种发布和接收HTML页面的方法,服务器端口号是80端口号
https协议:是http协议的加密版本,在http下加入了SSL层。服务器端口号是443端口

常见的请求的Method
在http协议中,定义了八种请求方法,这里介绍常用的两种:分别是get请求和post请求
1.get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会用get请求
2.post请求:向服务器发送数据(登陆),上传文件等,会对服务器资源产生影响的时候会使用post请求

urllib库----内置的库

urllib库是python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据
urllib函数
urlopen():
创建一个表示远程的url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据
1.url:请求的url
2,data: 请求的data,如果设置了这个值,那么将变成post请求
3,返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象,有read(size),readline(),readlines()以及getcode()等方法。
使用:
from urllib import request
url =‘http://XXXX’
res = request.urlopen(url)
可以通过read(),readline(),readlines()来读取res返回的数据,getcode()是获取返回的http状态码。

urlretrieve函数
这个函数可以方便的将网页上的一个文件保存到本地。
urlretrieve(url,文件的名称)
以下代码可以非常方便的将百度的首页下载到本地:
from urllib import request
request.urlretrieve(‘http://www.baidu.com/’,‘百度.html’)
urllib库中的编码和解码
urlencode(),parse_qs()
urlencode()可以把字典数据转换成URL编码的数据。
parse_qs()可以将编码后的url参数进行解码的操作
from urllib import parse
data ={‘name’:‘老王’,‘age’:18,‘greet’:‘hello world’}
res = parse.urlencode(data) #编码
print(res)
qs =parse.parse_qs(res) # 解码
以上代码是演示编码和解码,结果可以自己运行查看。
对字符串的编码
quote()
例如: a =‘蜡笔小新’

urllib库中的解析函数
urlpase()和urlsplit()可以用来将一个url中的各个组成部分进行分割,urlparse和urlsplit的功能上基本一摸一样,唯一不一样的是urlparse里面有params属性,而urlsplit没有这个params属性。
urllib库中的request中的Request
request.Request类用于网络请求,可以增加请求头,如果想要在请求的时候增加一些请求头,那么就必须使用request.Request类来实现。比喻要请求一个User-Agent

PorxyHandler处理器(代理设置)
很多网站会检测某段时间某个IP的访问次数(通过流量统计,系统日志等)如果次数多的不像正常人,它就会禁止这个IP的访问。
http://httpbin.org:查看http请求的一些参数。
代理的原理:
在请求目的网站之前,先请求代理服务器,然后代理服务器去请求目标网站,代理服务器拿到目的网站的数据后,再转发给我们的代码。
使用代理的方法:
1 ,使用Proxyhandler,传入代理构建一个handler
2,使用上面的handler构建一个opener
3,使用opener去发送一个请求
示例:

# 使用代理:
    # 步骤:
    # 1,使用ProxyHandler,传入代理构建一个handler
    handler=request.ProxyHandler({
   'http':'193.112.113.26:1080'})
    #  2.使用上面创建的handler构建一个opener
    opener = request.build_opener(handler)
    # 3,使用opener去发送一个请求
    res=opener.open(req)

    # res = urllib.request.urlopen(req)
    html = res.read()
    return html
if __name__=='__main__':
    url ='http://httpbin.org/ip'
    html= url_open(url)
    print(html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值