python第三方模块精选

python不但有着强大丰富的“内置电池”,同样的,第三方模块也是非常的多。目前收集了requests、paramiko、pymsql,以后会陆续添加:

一、requests

  Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

  利用urllib发送GET请求:


1

2

3

4

5

import urllib.request

= urllib.request.urlopen(‘http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508‘)

result = f.read().decode(‘utf-8‘)

  利用urllib发送携带请求头的GET请求


1

2

3

4

5

6

7

import urllib.request

req = urllib.request.Request(‘http://www.example.com/‘)

req.add_header(‘Referer‘‘http://www.python.org/‘)

= urllib.request.urlopen(req)

result = f.read().decode(‘utf-8‘)

注:更多见Python官方文档:https://docs.python.org/3.5/library/urllib.request.html#module-urllib.request



  Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。

1、安装模块

  pip3 install requests

2、使用模块

# 1、无参数实例

import requests

ret = requests.get(‘https://github.com/timeline.json‘)

print(ret.url)
print(ret.text)

# 2、有参数实例

import requests

payload = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘}
ret = requests.get("http://httpbin.org/get", params=payload)

print(ret.url)
print(ret.text)

GET请求

# 1、基本POST实例

import requests

payload = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘}
ret = requests.post("http://httpbin.org/post", data=payload)

print(ret.text)

# 2、发送请求头和数据实例

import requests
import json

url = ‘https://api.github.com/some/endpoint‘
payload = {‘some‘: ‘data‘}
headers = {‘content-type‘: ‘application/json‘}

ret = requests.post(url, data=json.dumps(payload), headers=headers)

print(ret.text)
print(ret.cookies)

POST请求

requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.head(url, **kwargs)
requests.delete(url, **kwargs)
requests.patch(url, data=None, **kwargs)
requests.options(url, **kwargs)

# 以上方法均是在此方法的基础上构建
requests.request(method, url, **kwargs)

其他请求

更多requests模块相关的文档见:http://cn.python-requests.org/zh_CN/latest/

3、Http请求和XML实例

实例:检测QQ账号是否在线

import urllib
import requests
from xml.etree import ElementTree as ET

# 使用内置模块urllib发送HTTP请求,或者XML格式内容
"""
f = urllib.request.urlopen(‘http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508‘)
result = f.read().decode(‘utf-8‘)
"""

# 使用第三方模块requests发送HTTP请求,或者XML格式内容
r = requests.get(‘http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508‘)
result = r.text

# 解析XML格式内容
node = ET.XML(result)

# 获取内容
if node.text == "Y":
    print("在线")
else:
    print("离线")

实例:查看火车停靠信息

import urllib
import requests
from xml.etree import ElementTree as ET

# 使用内置模块urllib发送HTTP请求,或者XML格式内容
"""
f = urllib.request.urlopen(‘http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=‘)
result = f.read().decode(‘utf-8‘)
"""

# 使用第三方模块requests发送HTTP请求,或者XML格式内容
r = requests.get(‘http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=‘)
result = r.text

# 解析XML格式内容
root = ET.XML(result)
for node in root.iter(‘TrainDetailInfo‘):
    print(node.find(‘TrainStation‘).text,node.find(‘StartTime‘).text,node.tag,node.attrib)

注:更多接口点击这里

4.网络小说爬虫

最后放一个利用requests写的超简单版本网络小说爬虫,请支持正版!

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Python 3.5

"""
这不是一个全自动的智能版本,只是当你闲得无聊的时候用用。
"""
import requests
import re

def action(url):
    ret = requests.get(url)
    ret.encoding = "gbk"
    title = re.findall(r"<h1>(.+)</h1>", ret.text)
    pattern = re.compile(r"<div id=\"content\"><script>readx..;</script>&nbsp;&nbsp;&nbsp;&nbsp;(.+)</div>")
    text = pattern.findall(ret.text)
    if text:
        text = re.sub(r"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;", "\n", text[0])
    text = "\n%s\n%s" % (title[0], text)
    next_addr = re.search(r"<a href=\"(\d+).html\">下一章</a>", ret.text)
    return next_addr.group(1), text

if __name__ == ‘__main__‘:
    # 找到第一章的链接地址
    url = "http://www.biquge.la/book/9352/3992880.html"
    while True:
        addr,result = action(url)
        # 懒得抓取书名,请自行修改
        with open(r"d:\book_name.txt", "a", encoding="utf8") as w:
            w.write(result)
        url = "http://www.biquge.la/book/9352/%s.html" % addr

二、paramiko

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。

  使用paramiko可以很好的解决以上问题,比起前面的方法,它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助。

1、下载安装


1

2

3

pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto

pip3 install pycrypto

pip3 install paramiko

1.1 PyCrypto安装

wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz

tar -zxvf pycrypto-2.6.tar.gz

cd pycrypto-2.6/

python setup.py build && python setup.py install

1.2 paramiko安装

wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

tar xvzf paramiko-1.7.7.1.tar.gz

cd paramiko-1.7.7.1/

python setup.py build && python setup.py install

Crypto error: ‘module‘ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC‘

  测试:

python>> import paramiko

  (Crypto error: ‘module‘ object has no attribute ‘HAVE_DECL_MPZ_POWM_SEC‘

  找到 /usr/lib/python2.7/site-packages/Crypto/Util/number.py

  把if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:

  注释了

  #if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:

  )

2、模块使用

 执行命令 - 用户名+密码


1

2

3

4

5

6

7

8

9

10

11

#!/usr/bin/env python

#coding:utf-8

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(‘192.168.1.108‘22‘alex‘‘123‘)

stdin, stdout, stderr = ssh.exec_command(‘df‘)

print stdout.read()

ssh.close();

执行命令 - 密钥


1

2

3

4

5

6

7

8

9

10

11

12

import paramiko

private_key_path = ‘/home/auto/.ssh/id_rsa‘

key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(‘主机名 ‘, 端口, ‘用户名‘, key)

stdin, stdout, stderr = ssh.exec_command(‘df‘)

print stdout.read()

ssh.close()

上传或下载文件 - 用户名+密码 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import os,sys

import paramiko

= paramiko.Transport((‘182.92.219.86‘,22))

t.connect(username=‘wupeiqi‘,password=‘123‘)

sftp = paramiko.SFTPClient.from_transport(t)

sftp.put(‘/tmp/test.py‘,‘/tmp/test.py‘)

t.close()

import os,sys

import paramiko

= paramiko.Transport((‘182.92.219.86‘,22))

t.connect(username=‘wupeiqi‘,password=‘123‘)

sftp = paramiko.SFTPClient.from_transport(t)

sftp.get(‘/tmp/test.py‘,‘/tmp/test2.py‘)

t.close()

上传或下载文件 - 密钥 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import paramiko

pravie_key_path = ‘/home/auto/.ssh/id_rsa‘

key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

= paramiko.Transport((‘182.92.219.86‘,22))

t.connect(username=‘wupeiqi‘,pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)

sftp.put(‘/tmp/test3.py‘,‘/tmp/test3.py‘)

t.close()

import paramiko

pravie_key_path = ‘/home/auto/.ssh/id_rsa‘

key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

= paramiko.Transport((‘182.92.219.86‘,22))

t.connect(username=‘wupeiqi‘,pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)

sftp.get(‘/tmp/test3.py‘,‘/tmp/test4.py‘)

t.close()

pymsql

pymsql是Python中操作MySQL数据库的第三方模块之一,其使用方法和MySQLdb模块几乎相同。

一、下载安装:

pip3 install pymysql

二、使用

1、执行SQL


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

 

# 创建连接

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)

# 创建游标

cursor = conn.cursor()

 

# 执行SQL,并返回收影响行数

effect_row = cursor.execute("update hosts set host = ‘1.1.1.2‘")

 

# 执行SQL,并返回受影响行数

#effect_row = cursor.execute("update hosts set host = ‘1.1.1.2‘ where nid > %s", (1,))

 

# 执行SQL,并返回受影响行数

#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])

 

 

# 提交,不然无法保存新建或者修改的数据

conn.commit()

 

# 关闭游标

cursor.close()

# 关闭连接

conn.close()

2、获取新创建数据自增ID


1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

 

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)

cursor = conn.cursor()

cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])

conn.commit()

cursor.close()

conn.close()

 

# 获取最新自增ID

new_id = cursor.lastrowid

3、获取查询数据


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

 

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)

cursor = conn.cursor()

cursor.execute("select * from hosts")

 

# 获取第一行数据

row_1 = cursor.fetchone()

 

# 获取前n行数据

# row_2 = cursor.fetchmany(3)

# 获取所有数据

# row_3 = cursor.fetchall()

 

conn.commit()

cursor.close()

conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode=‘relative‘)  # 相对当前位置移动
  • cursor.scroll(2,mode=‘absolute‘) # 相对绝对位置移动

4、fetch数据类型

  默认获取的数据是元组类型,如果想要自动将数据转换成字典类型,可以在游标定义式进行参数设定,如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import pymysql

 

conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘)

 

# 游标设置为字典类型

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

r = cursor.execute("call p1()")

 

result = cursor.fetchone()

 

conn.commit()

cursor.close()

conn.close()

  

时间: 2025-01-24 22:37:09

python第三方模块精选的相关文章

2如何安装Python第三方模块

如何安装Python第三方模块 Python官方为我们提供了第三方库,那么如何安装这些库呢? 安装第三方库有两种方式: 第一种就是使用python自带的仓库pip进安装 第二种就是使用源码进行安装 PIP方式安装 首先用yum安装python-pip软件包 [[email protected] ~]# yum  install python-pip 安装完成之后可以使用pip -V查看安装版本 [[email protected] ~]# pip -V pip 7.1.0 from /usr/l

安装Python第三方模块MySQLdb

用easy-install安装总是提示error: Unable to find vcvarsall.bat错误,尝试各种手段终于没有解决.最后从http://www.crifan.com/python_install_module_mysql_mysqldb/这篇博客中下载MySQL-python-1.2.3.win-amd64-py2.7.exe 安装成功. 安装Python第三方模块MySQLdb,布布扣,bubuko.com

Mac系统中python idle导入第三方模块成功,ecplise导入python第三方模块失败解决方法

遇到一个比较纠结了4个月的问题,一直没有在意,今天实在忍受不了,尝试各种解决办法,终于把这个烦人的问题完美解决,不敢独享,写出来和各位大神共享. 问题:在mac OSx操作系统下,安装了python第三方模块,MySQLdb.xlrt.xlwt.selenium等等,在python的idle中可以成功的import这些模块,但是在eclipse中缺始终无法导入,提示"no module named xxxx". 在网上和各个pythonQQ群中搜索各种解决方法,无果,群里还有个大神说苹

python第三方模块—psutil模块

系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽.设备资源是否应该扩容.运用Python第三方系统基础模块,可以轻松获取服务关键运营指标数据,包括Linux基本性能.块设备.网卡接口.系统信息.网络地址库等信息.在采集到这些数据后,我们就可以全方位了解系统服务的状态,再结合告警机制,可以在第一时间响应,将异常现在苗头

Python 第三方模块pythonnmap来实现高效的端口扫描

Python_Clamad 实现高效的端口扫描器pythonnmap Python的第三方模块pythonnmap来实现高效的端口扫描 python-nmap模块的安装方法如下: yum -y install nmap #安装nmap工具 pip install python-nmap #模块源码安装 ## https://pypi.python.org/pypi/python-nmap tar -zxvf python-nmap-0.1.4.tar.gz cd python-nmap-0.1.

python第三方模块的导入

模块搜索路径 当我们尝试加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错: >>> import module1 Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named module1 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,

安装python第三方模块

下载 第三方模块的下载地址:https://pypi.python.org/pypi 其他版本的第三方模块下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy pipy国内镜像目前有: 豆瓣 http://pypi.douban.com/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 清华大学

Python第三方模块【Pygame】

了解Pygame 简单来说Pygame是建立在SDL基础上,Python专门用于电子游戏设计的第三方模块. SDL:C语言编写的开源跨平台的多媒体开发库. 基于SDL使得游戏的图形化界面开发被大大简化,Pygame在开发时,开发者可以把精力集中于处理游戏逻辑,其资源结构则由python这类高级语言来提供. pygame的安装 利用pip工具安装pygame linux中shell执行 (windows中dos): pip install pygame 第一个pygame程序 实现窗口化程序的稳定

psutil——获取系统信息的Python第三方模块

本文摘自廖雪峰大神个人网站:https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984 用Python来编写脚本简化日常的运维工作是Python的一个重要用途.在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等.要获取这些系统信息,Python可以通过subprocess模块调用并获取结果.但这样做显得很麻烦,尤其是要写很多解析代码. 在Python中获取系统信息的另一个好办法是使