目录

Python2.x中

urllib和urllib2

常用方法和类

Python3.x中

urllib

requests


Python2.x中

urllib和urllib2

urllib 和 urllib2 是 python2.x 自带的模块,提供了一系列用于操作URL的功能。

urllib 和 urllib2 都是接受URL请求的相关模块,但是urllib2可以接受一个Request类的实例来设置URL请求的 headers,urllib 仅可以接受URL。这意味着,urllib不可以伪装你的User Agent 字符串等。

但是 urllib 提供 urlencode 方法用来对数据进行url编码,而 urllib2 没有,所以 urllib 经常和 urllib2 一起使用。

常用方法和类

urllib2.urlopen( url  [, data]  [, timeout] )

urlopen方法是urllib2模块最常用也最简单的方法,它打开URL网址。调用urlopen函数对请求的url返回一个response对象。这个response类似于一个file对象,所以用.read()函数可以操作这个response对象

  • url 参数可以是一个字符串 url 或者是一个Request对象。url 必须是 http:// 的格式
  • 对于可选参数 data,表示以 post 方式提交到 url 的数据。不填则为 get 方式提交
  • 对于可选的参数 timeout,阻塞操作以秒为单位,如果没有指定,将使用设置的全局默认timeout值。
import urllib2

#设置代理
proxies={"http":"http://127.0.0.1:8080"}
proxy_s=urllib2.ProxyHandler(proxies)
opener=urllib2.build_opener(proxy_s)
urllib2.install_opener(opener) response = urllib2.urlopen('http://python.org/',timeout=3) #超时时间3秒
html = response.read()

urllib2.urlopen( urllib2.Request   [,timeout])

  • urllib2.Request表示的是一个urllib2.Request对象
  • 对于可选的参数 timeout,阻塞操作以秒为单位,如果没有指定,将使用设置的全局默认timeout值

urlopen方法也可通过建立了一个Request对象来明确指明想要获取的url。

import urllib2
req = urllib2.Request('http://python.org/')
response = urllib2.urlopen(req,timeout=3)
the_page = response.read()

这里用到了urllib2.Request 类,对于上例,我们只通过了URL实例化了Request类的对象,其实Request类还有其他的参数 。

class urllib2.Request(url  [, data]  [, headers]  [, origin_req_host]  [, unverifiable])

  • url 参数可以是一个字符串 url 或者是一个Request对象。url 必须是 http:// 的格式
  • 对于可选参数data,data 是一个字符串,指定额外的数据发送到服务器,当请求含有data参数时,HTTP的请求为POST,而不是GET。而data数据需要先进行URL编码处理,这就需要urllib.urlencode()函数了
  • 可选参数headers是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用add_header()方法来添加。
  • 可选参数origin_req_host是RFC2965定义的源交互的request-host。默认的取值是cookielib.request_host(self)。这是由用户发起的原始请求的主机名或IP地址。例如,如果请求的是一个HTML文档中的图像,这应该是包含该图像的页面请求的request-host。
  • 可选参数unverifiable代表请求是否是无法验证的,它也是由RFC2965定义的。默认值为false。一个无法验证的请求是,其用户的URL没有足够的权限来被接受。例如,如果请求的是在HTML文档中的图像,但是用户没有自动抓取图像的权限,unverifiable的值就应该是true。
import urllib
import urllib2
requrl = 'http://www.python.org/'
header = { 'User-Agent' : 'Mozilla/4.0 compatible; MSIE 5.5; Windows NT',
'Referer' : 'http://www.baidu.com/login.php'}
values = {'name': 'Tom',
'sex' : 'Man',
'id' : '10' }
data = urllib.urlencode(values) #对数据进行URL编码处理
req = urllib2.Request(url=requrl, data=data,headers=header)
response = urllib2.urlopen(req)
the_page = response.read() ##还可以使用add_header方法添加
req = urllib2.Request(url=requrl,data=data,headers)
req.add_header('Referer', 'http://www.python.org/')
req.add_header('User-Agent','Mozilla/4.0 compatible; MSIE 5.5; Windows NT')
response = urllib2.urlopen(req)
the_page = response.read()

python2.X环境,使用urllib和urllib2进行发包的相关文章:Python脚本自动化破解大白鲨摄像头(Shodan)

Python3.x中

urllib

在python3.x中,把 http 相关的所有包打包成了2个包:http 和  urllib 。也就是说urllib和urllib2合成了一个urllib包

http 会处理所有客户端--服务器http请求的具体细节,其中:

  • client 会处理客户端的部分
  • server 会协助你编写Python web服务器程序
  • cookies 和cookiejar会处理cookie,cookie可以在请求中存储数据

urllib 是基于 http 的高层库,它有以下三个主要功能:

  • reques t处理客户端的请求
  • response 处理服务端的响应
  • parse 会解析url

常见的类和方法

request.urlopen(url [, data] [, timeout])

参数选项和python2.x中的 urllib.urlopen 一样

from urllib import request

response = request.urlopen('http://python.org/')
html = response.read()

request.urlopen( request.Request )

参数选项和python2.x中的 urllib.urlopen 一样

from urllib import request

req = request.Request('http://python.org/')
response = request.urlopen(req)
the_page = response.read()

自定义 headers 和 data

from urllib import parse
from urllib import request url = 'http://www.someserver.com/cgi-bin/register.cgi'
headers = { 'Host': '192.168.153.130',
'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer' : 'http://www.python.org/',
'Accept' : '*/*' }
values = {'name': 'Tom',
'sex' : 'Man',
'id' : '10' }
data = urllib.parse.urlencode(values)
req = urllib.request.Request(url, data)
response = urllib.request.urlopen(req)
the_page = response.read()
print(the_page.decode("utf8")) urllib中进行URL编码和解码还可以使用quote() 和 unquote()函数
a=urllib.parse.quote("hello,word") #将字符串进行编码
b=urllib.parse.unquote(a) #将字符串进行解码

requests

而requests库则是非常优秀的第三方库,它使用 Apache2 Licensed 许可证的 HTTP 库。Requests 使用的是 urllib(python3.x中的urllib),因此继承了它的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。现代、国际化、人性化

requests模块中可以有很多种请求网页的方式

  • requests.get('http://www.baidu.com')
  • requests.post('http://www.baidu.com')
  • requests.put('http://www.baidu.com')
  • requests.delete('http://www.baidu.com')
  • requests.head('http://www.baidu.com')
  • requests.options(http://www.baidu.com')
import requests

headers = { 'Host': '192.168.153.130',
'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer' : 'http://www.python.org/',
'Accept' : '*/*' }
values = {'name': 'Tom',
'sex' : 'Man',
'id' : '10' }
proxie={"http":"http://127.0.0.1:8080"} #设置代理 res=requests.get('http://www.baidu.com', data=values,headers=headers,timeout=0.1,proxies=proxie) res.status_code ##状态码
res.url ##请求的url
res.request.headers ##请求头信息,返回的是一个字典对象,不修改的话,默认是python的请求头
res.headers ##响应头信息,返回的是一个字典对象
responce.headers['Content-Type'] #查看响应头的具体部分
res.cookies ##cookie信息,返回的是一个字典对象
res.text ##响应内容的字符串形式,即返回的页面内容
res.content ##响应内容的二进制形式
res.encoding='utf-8' ##设置响应的编码
res.apparent_encoding ##从内容中分析出的响应内容编码方式(备选编码方式)

相关文章:Python3——requests模块详解

Python2中的urllib、urllib2和 Python3中的urllib、requests的更多相关文章

  1. python2中的unicode()函数在python3中会报错:

    python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...

  2. python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为

    python接口自动化测试二十七:密码MD5加密   ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...

  3. 详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests

    在python2中,urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的不同如下: 1.urllib2可以接受一个Request类的实例来设置URL请求的hea ...

  4. Python2中input()、raw_input()和Python3中input()

    听了ALEX的某节课,说input()和raw_input()函数在Python2中没有区别,现在来探讨一下Python2中的input().raw_input()函数和Pyhont3中的input( ...

  5. 常见的爬虫分析库(1)-Python3中Urllib库基本使用

    原文来自:https://www.cnblogs.com/0bug/p/8893677.html 什么是Urllib? Python内置的HTTP请求库 urllib.request          ...

  6. Python3中Urllib库基本使用

    什么是Urllib? Python内置的HTTP请求库 urllib.request          请求模块 urllib.error              异常处理模块 urllib.par ...

  7. Python3中的新特性(1)——新的语言特性

    1.源代码编码和标识符         Python3假定源代码使用UTF-8编码.另外,关于标识符中哪些字符是合法的规则也放宽了.特别是,标识符可以包含代码点为U+0080及以上的任意有效Unico ...

  8. python3 中的reload(sys)和sys.setdefaultencoding('utf-8')

    通常我们为了防止出现乱码会进行一下操作 import sys reload(sys) sys.setdefaultencoding('utf-8') 但这是python2的写法,但是在python3中 ...

  9. Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)

    Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...

随机推荐

  1. 混合编程:如何用python11调用C++

    摘要:在实际开发过程中,免不了涉及到混合编程,比如,对于python这种脚本语言,性能还是有限的,在一些对性能要求高的情景下面,还是需要使用c/c++来完成. 那怎样做呢?我们能使用pybind11作 ...

  2. Get和Post区别(转载)

    转载自:https://www.cnblogs.com/logsharing/p/8448446.html GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一 ...

  3. 让 Java 中 if else 更优雅的几个小技巧

    对于一个高级 crud 工程师‍而言,if else 是写代码时使用频率最高的关键词之一,然而有时过多的 if else 会让我们优雅的 crud 代码显得不那么优雅,并且感到脑壳疼

  4. P1048_采药(JAVA语言)

    思路:动态规划的背包问题.把时间看作重量,转换为01背包问题求解. 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出 ...

  5. wrf模拟的domain图绘制

    wrf模拟的区域绘制,domain图,利用python的cartopy库绘制模拟区域 参考Liang Chen的draw_wrf_domian.py这个代码, 出处python画wrf模式的模拟区域 ...

  6. 《C++反汇编与逆向分析技术揭秘》--数据类型

      浮点数类型 IEEE标准从逻辑上采用一个三元组{S, E, M}来表示一个数N,它规定基数为2,符号位S用0和1分别表示正和负,尾数M用原码表示,阶码E用移码表示.根据浮点数的规格化方法,尾数域的 ...

  7. Android Studio 之 编写精美的聊天界面

    •准备工作 首先制作一张 .9 格式的聊天气泡,参见我的这篇博客: 需要注意的是,制作完成后,应该将原始文件删除,否则AS会分不清楚而报错. 新建一个 Empty Activity,Java 和 XM ...

  8. JS中dom操作的事件

    Click--点击事件 优先级:dom.onclick 高于标签上的onClick属性 监听事件 --不会覆盖前面的事件效果 dom.addEventListener()    括号里面有三个参数 1 ...

  9. 【wp】2021MAR-DASCTF_逆向

    昨天打完的MAR DASCTF,来复个盘~ 不过就re做了3/4然后有事提前开溜了hhh,拿了drinkSomeTea和replace的三血心满意足(蜜汁三血执念. 感觉这回的出题人好喜欢TEA啊(正 ...

  10. C# net Emgu.CV.World 人脸识别 根据照片将人脸抠图出来。

    Emgu.CV.World 人脸识别 根据照片将人脸抠图出来.效果如下: 应用范围:配合摄像头,抓取的图像,抠出人脸照片,这样人脸照片的大小会很小,传输速度快.这样识别速度也就快. 目前我正在做百度人 ...