⑴ python常用函数包有哪些
一些python常用函数包:
1、Urllib3
Urllib3是一个 Python 的 HTTP 客户端,它拥有 Python 标准库中缺少的许多功能:
线程安全
连接池
客户端 SSL/TLS 验证
使用分段编码上传文件
用来重试请求和处理 HTTP 重定向的助手
支持 gzip 和 deflate 编码
HTTP 和 SOCKS 的代理支持
2、Six
six 是一个是 Python 2 和 3 的兼容性库。这个项目旨在支持可同时运行在 Python 2 和 3 上的代码库。它提供了许多可简化 Python 2 和 3 之间语法差异的函数。
3、botocore、boto3、s3transfer、awscli
Botocore是 AWS 的底层接口。Botocore是 Boto3 库(#22)的基础,后者让你可以使用 Amazon S3 和 Amazon EC2 一类的服务。Botocore 还是 AWS-CLI 的基础,后者为 AWS 提供统一的命令行界面。
S3transfer(#7)是用于管理 Amazon S3 传输的 Python 库。它正在积极开发中,其介绍页面不推荐人们现在使用,或者至少等版本固定下来再用,因为其 API 可能发生变化,在次要版本之间都可能更改。Boto3、AWS-CLI和其他许多项目都依赖s3transfer。
4、Pip
pip是“Pip Installs Packages”的首字母递归缩写。
pip很容易使用。要安装一个包只需pip install <package name>即可,而删除包只需pip uninstall <package name>即可。
最大优点之一是它可以获取包列表,通常以requirements.txt文件的形式获取。该文件能选择包含所需版本的详细规范。大多数 Python 项目都包含这样的文件。
如果结合使用pip与virtualenv(列表中的 #57),就可以创建可预测的隔离环境,同时不会干扰底层系统,反之亦然。
5、Python-dateutil
python-dateutil模块提供了对标准datetime模块的强大扩展。我的经验是,常规的Python datetime缺少哪些功能,python-dateutil就能补足那一块。
6、Requests
Requests建立在我们的 #1 库——urllib3基础上。它让 Web 请求变得非常简单。相比urllib3来说,很多人更喜欢这个包。而且使用它的最终用户可能也比urllib3更多。后者更偏底层,并且考虑到它对内部的控制级别,它一般是作为其他项目的依赖项。
7、Certifi
近年来,几乎所有网站都转向 SSL,你可以通过地址栏中的小锁符号来识别它。加了小锁意味着与该站点的通信是安全和加密的,能防止窃听行为。
8、Idna
根据其 PyPI 页面,idna提供了“对 RFC5891 中指定的应用程序中国际化域名(IDNA)协议的支持。”
IDNA的核心是两个函数:ToASCII和ToUnicode。ToASCII会将国际 Unicode 域转换为 ASCII 字符串。ToUnicode则逆转该过程。在IDNA包中,这些函数称为idna.encode()和idna.decode()
9、PyYAML
YAML是一种数据序列化格式。它的设计宗旨是让人类和计算机都能很容易地阅读代码——人类很容易读写它的内容,计算机也可以解析它。
PyYAML是 Python 的YAML解析器和发射器,这意味着它可以读写YAML。它会把任何 Python 对象写成YAML:列表、字典,甚至是类实例都包括在内。
10、Pyasn1
像上面的IDNA一样,这个项目也非常有用:
ASN.1 类型和 DER/BER/CER 编码(X.208)的纯 Python 实现
所幸这个已有数十年历史的标准有很多信息可用。ASN.1是 Abstract Syntax Notation One 的缩写,它就像是数据序列化的教父。它来自电信行业。也许你知道协议缓冲区或 Apache Thrift?这就是它们的 1984 年版本。
11、Docutils
Docutils是一个模块化系统,用来将纯文本文档处理为很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能读取reStructuredText格式的纯文本文档,这种格式是类似于 MarkDown 的易读标记语法。
12、Chardet
你可以用chardet模块来检测文件或数据流的字符集。比如说,需要分析大量随机文本时,这会很有用。但你也可以在处理远程下载的数据,但不知道用的是什么字符集时使用它。
13、RSA
rsa包是一个纯 Python 的 RSA 实现。它支持:
加密和解密
签名和验证签名
根据 PKCS#1 1.5 版生成密钥
它既可以用作 Python 库,也能在命令行中使用。
14、Jmespath
JMESPath,发音为“James path”,使 Python 中的 JSON 更容易使用。它允许你声明性地指定如何从 JSON 文档中提取元素。
15、Setuptools
它是用于创建 Python 包的工具。不过,其文档很糟糕。它没有清晰描述它的用途,并且文档中包含无效链接。最好的信息源是这个站点,特别是这个创建 Python 包的指南。
16、Pytz
像dateutils一样,这个库可帮助你处理日期和时间。有时候,时区处理起来可能很麻烦。幸好有这样的包,可以让事情变得简单些。
17、Futures
从 Python 3.2 开始,python 提供current.futures模块,可帮助你实现异步执行。futures 包是该库适用于 Python 2 的 backport。它不适用于 Python3 用户,因为 Python 3 原生提供了该模块。
18、Colorama
使用 Colorama,你可以为终端添加一些颜色:
更多Python知识请关注Python自学网
⑵ 如何使用python立即发送http请求参数
1 首先安装requests这个模块,方法是 输入pip install requests。当然你要装好pip这个包管理器。
2 然后
import requests
url = " " # 这里是你的url
your_param = {'Refer':"sina_index"} # 这里是你要发送的请求参数!, 它在url后边加上 ??Refer=sina_index这样子的东东
result = requests.get(url, param = your_param) # 发送请求,如果url是http://s.weibo.com/weibo/s 那么 这句话的的效果就是 http://s.weibo.com/weibo/s?Refer=sina_index
result_final = result.text #这样你就获取到了你发送的这个URL + 参数 之后的结果
全部手打的,采纳呗。
⑶ 怎么在Python里使用UTF-8编码
在python代码即.py文件的头部声明即可
py文件中的编码
Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正一个 mole 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明:
# -*- coding=utf-8 -*-
#coding=utf-8
# 以上两种选其一即可
其他的编码如:gbk、gb2312也可以;否则会出现:
SyntaxError: Non-ASCII character 'xe4' in file test.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
python中的编码与解码
先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str 和 unicode,他们都是basestring的派生类;
str类型是一个包含Characters represent (at least) 8-bit bytes的序列;
unicode 的每个 unit 是一个 unicode obj;
在str的文档中有这样的一句话:
The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file.
也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。
utf-8编码
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字的应用中,优先采用的编码。
UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节):
1、128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
2、带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要两个字节编码(Unicode范围由U+0080至U+07FF)。
3、其他基本多文种平面(BMP)中的字符(这包含了大部分常用字,如大部分的汉字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。
4、其他极少使用的Unicode辅助平面的字符使用四至六字节编码(Unicode范围由U+10000至U+1FFFFF使用四字节,Unicode范围由U+200000至U+3FFFFFF使用五字节,Unicode范围由U+4000000至U+7FFFFFFF使用六字节)。
对上述提及的第四种字符而言,UTF-8使用四至六个字节来编码似乎太耗费资源了。但UTF-8对所有常用的字符都可以用三个字节表示,而且它的另一种选择,UTF-16编码,对前述的第四种字符同样需要四个字节来编码,所以要决定UTF-8或UTF-16哪种编码比较有效率,还要视所使用的字符的分布范围而定。不过,如果使用一些传统的压缩系统,比如DEFLATE,则这些不同编码系统间的的差异就变得微不足道了。若顾及传统压缩算法在压缩较短文字上的效果不大,可以考虑使用Unicode标准压缩格式(SCSU)。
互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。互联网邮件联盟(IMC)建议所有电子邮件软件都支持UTF-8编码。
⑷ 如何用Python写一个http post请求
HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。常见的四种编码方式如下:
1、application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):
POST HTTP/1.1 Content-Type:
application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
2、multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值,下面是示例
POST HTTP/1.1
Content-Type:multipart/form-data; boundary=----
------
Content-Disposition: form-data; name="text"
title
------
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
--------
3、application/json
application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。
4、text/xml
它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。
那么Python在调用外部http请求时,post请求怎么传请求体呢?说实话楼主只实践过【1、application/x-www-form-urlencoded】【2、multipart/form-data 】和【3、application/json】
一、application/x-www-form-urlencoded
import urllib
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
body_value = urllib.urlencode(body_value)
request = urllib2.Request(url, body_value)
request.add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、multipart/form-data
需要利用python的poster模块,安装poster:pip install poster
代码:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有请求头数据,则添加请求头
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
二、application/json
import json
url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
body_value = json.JSONEncoder().encode(body_value)
request = urllib2.Request(url, body_value)
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()
⑸ Python Http 请求
如果要进行客户端和服务器端之间的消息传递,我们可以使用HTTP协议请求
通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递(表单中的信息会自动转化为URL地址中的数据,通过URL地址传递)
备注:已经取得资源,并将资源添加到响应中的消息体
可以向服务器提交数据,是一种比较安全的数据传递方式,比如在登录时,经常使用 POST 请求发送数据
请求服务器存储一个资源,通常需要制定存储的位置
请求服务器删除一个资源
请求获取对应的 HTTP 报头信息
可以获得当前URL所支持的请求类型
状态码:200 OK
表明请求已经成功. 默认情况下成功的请求将会被缓存
不同请求方式对于请求成功的意义如下:
GET:已经取得资源,并将资源添加到响应中的消息体.
HEAD:作为消息体的头部信息
POST:在消息体中描述此次请求的结果
请求成功对于PUT 和 DELETE 来说并不是200 ok 而是 204 所代表的没有资源 (或者 201 所代表的当一个资源首次被创建成功
以下是常见状态码及含义
⑹ python抓取网页内容时出错,UnicodeEncodeError: 'gbk' codec can't encode character '\ue4bf.....
问题是这样的,网页的数据应该是'utf-8'编码,这个可以在网页的head上面看得到,然后你爬网页的时候会把它转化成Unicode,出问题的是在print()这儿,对于print()这个函数,他需要把内容转化为'gbk'编码才能显示出来. 然后解决办法是这样,你在转化后的Unicode编码的string后面,加上 .encode('GBK','ignore').decode('GBk') 也就是先用gbk编码,忽略掉非法字符,然后再译码,是不是很有道理 应该是这样的,因为我和你遇到同样的问题,现在解决了
⑺ python http请求时使用GET返回成功,使用POST却返回失败
看来你是对于网页抓取的逻辑不太熟悉,所以自己先去看看:
【整理】关于抓取网页,分析网页内容,模拟登陆网站的逻辑/流程和注意事项
看懂了逻辑后,再去学习用工具如何抓取出来相关的逻辑:
【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(网络首页)的内部逻辑过程
最后,再学习如何用python语言实现这些逻辑:
【教程】抓取网并提取网页中所需要的信息 之 Python版
【教程】模拟登陆网站 之 Python版(内含两种版本的完整的可运行的代码)
(这里不给贴地址,自己或google搜标题即可找到我的这些帖子)
⑻ 怎样用python测result接口 post
1、Requests简介
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。
python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
总之,大家以后对urllib2库敬而远之就行了。来拥抱Requests吧。
通过下面方法安装requests
[python] view plain
pip install requests
2、Requests如何发送HTTP请求
非常简单,先导入requests,
[python] view plain
import requests
然后,按照下面的方法发送http的各种请求:
[python] view plain
r = requests.get('')
r = requests.post("")
r = requests.put("")
r = requests.delete("")
r = requests.head("")
r = requests.options("")
3、为URL传递参数
如果http请求需要带URL参数(注意是URL参数不是body参数),那么需要将参数附带到payload字典里头,按照下面的方法发送请求:
[python] view plain
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("",params=payload)
print r.url
通过print(r.url)能看到URL已被正确编码:
[python] view plain
注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。
4、unicode响应内容
[python] view plain
import requests
r = requests.get('')
r.text
响应结果是:
{"message":"Hello there, wayfaring stranger. If you're reading this then you probably didn't see our blog post a couple of years back announcing that this API would Go away: Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":""}
Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码。你可以找出Requests使用了什么编码,并且能够使用r.encoding 属性来改变它
>>> r.encoding
'utf-8'
5、二进制响应内容
如果请求返回的是二进制的图片,你可以使用r.content访问请求响应体。
[python] view plain
import requests
from PIL import Image
from StringIO import StringIO
r = requests.get('')
i = Image.open(StringIO(r.content))
i.show()
6、JSON响应内容
Requests中也有一个内置的JSON解码器,助你处理JSON数据:
[python] view plain
import requests
r = requests.get('')
print r.json()
r.json将返回的json格式字符串解码成python字典。r.text返回的utf-8的文本。
7、定制请求头
如果你想为请求添加HTTP头部,只要简单地传递一个 dict 给headers 参数就可以了。
[python] view plain
import requests
import json
payload = {'some': 'data'}
headers = {'content-type': 'application/json'}
r = requests.get('', data=json.mps(payload), headers=headers)
print r.json()
注意,这里的payload是放到body里面的,所以params参数要使用json数据。
8、POST请求
就像上面‘定制请求头’中的例子,将payload序列化为json格式数据,传递给data参数。
9、POST提交文件
先制作一个text文件,名为‘report.txt’,内容是‘this is a file’。Requests使得上传多部分编码文件变得很简单:
[python] view plain
import requests
url = ''
files = {'file': open('report.txt', 'rb')}
r = requests.post(url, files=files)
print r.text
返回结果是:
[python] view plain
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
{
"args": {},
"data": "",
"files": {
<strong>"file": "this is a file"</strong>
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "160",
"Content-Type": "multipart/form-data; boundary=",
"Host": "",
"User-Agent": "python-requests/2.7.0 CPython/2.7.9 Windows/2012Server"
},
"json": null,
"origin": "202.108.92.226",
"url": ""
}
Process finished with exit code 0
10、POST提交表单
传递一个字典给 data 参数就可以了。数据字典在发出请求时会自动编码为表单形式:
[python] view plain
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("", data=payload)
查看响应内容:
>>> print r.text
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "",
"User-Agent": "python-requests/2.6.0 CPython/2.7.10 Windows/7"
},
"json": null,
"origin": "124.251.251.2",
"url": ""
}
11、响应状态码
使用r.status_code返回响应的状态码。
[python] view plain
import requests
r = requests.get('')
print r.status_code
为方便引用,Requests还附带了一个内置的状态码查询对象:
[python] view plain
print r.status_code == requests.codes.ok
12、失败请求抛出异常
如果发送了一个失败请求(非200响应),我们可以通过 Response.raise_for_status()来抛出异常:
[python] view plain
import requests
bad_r = requests.get('')
print bad_r.status_code
bad_r.raise_for_status()
返回结果是:
[python] view plain
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
404
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py", line 5, in <mole>
bad_r.raise_for_status()
File "C:\Python27\lib\site-packages\requests\models.py", line 851, in raise_for_status
raise HTTPError(http_error_msg, response=self)
<strong>requests.exceptions.HTTPError: 404 Client Error: NOT FOUND</strong>
Process finished with exit code 1
如果返回码是200,则不会抛出异常,即:
[python] view plain
import requests
bad_r = requests.get('')
print bad_r.status_code
bad_r.raise_for_status()
的返回结果是:
[python] view plain
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/flaskexample/postfile.py
200
Process finished with exit code 0
13、响应头
我们可以查看以一个Python字典形式展示的服务器响应头:
读取全部头部:
[python] view plain
r.headers
返回:
{
'content-encoding': 'gzip',
'transfer-encoding': 'chunked',
'connection': 'close',
'server': 'nginx/1.0.4',
'x-runtime': '148ms',
'etag': '""',
'content-type': 'application/json'
}
读取某一个头部字段:
[python] view plain
r.headers['Content-Type']
r.headers.get('content-type')
14、Cookies
得到响应中包含的一些Cookie:
[python] view plain
>>> url = ''
>>> r = requests.get(url)
>>> r.cookies['example_cookie_name']
'example_cookie_value'
要想发送你的cookies到服务器,可以使用 cookies 参数:
[python] view plain
>>> url = ''
>>> cookies = dict(cookies_are='working')
>>> r = requests.get(url, cookies=cookies)
>>> r.text
返回结果:
u'{\n "cookies": {\n "cookies_are": "working"\n }\n}\n'
15、重定向与请求历史
默认情况下,除了 HEAD, Requests会自动处理所有重定向。
可以使用响应对象的 history 方法来追踪重定向。
[python] view plain
>>> r = requests.get('')
>>> r.url
''
>>> r.status_code
200
>>> r.history
[<Response [301]>]
如果你使用的是GET, OPTIONS, POST, PUT, PATCH 或者 DELETE,,那么你可以通过 allow_redirects 参数禁用重定向处理:
[python] view plain
>>> r = requests.get('', allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]
如果你使用的是HEAD,你也可以启用重定向:
[python] view plain
>>> r = requests.head('', allow_redirects=True)
>>> r.url
''
>>> r.history
[<Response [301]>]
⑼ 俺们是Python的小菜,求大神帮忙解决个问题
原因:
你当前使用的python文件JudgeYear.py,是用的是非UTF-8编码的,即你用的是GBK编码的。
当你运行你的JudgeYear.py时,由于你没有指定你的JudgeYear.py文件本身所采用的编码类型,所以python解析器会去按照默认的UTF-8去解析你的JudgeYear.py,但是实际上你的JudgeYear.py是用GBK编码保存的,所以就出现上面的解析的错误了。
解决办法:
两种:
(1)指定JudgeYear.py的编码为GBK
做法:
在你的文件最开始部分,添加两行代码:
#!/usr/bin/python
#-*-coding:gbk-*-
这个是用来指定当前文件,即你的JudgeYear.py文件,编码为gbk的。
(2)不指定JudgeYear.py的编码,但是把JudgeYear.py文件本身的编码转换为UTF-8
做法:
用Notepad++或VSCode,去将JudgeYear.py转换为UTF-8编码