python之最常用的模塊一籮筐
其實我挺羨慕火車的
為什么?
他們連擦肩而過都那么久
request模塊:
requests 是一個功能強大、簡單易用的 HTTP 請求庫
- 請求
requests.get('http://httpbin.org/get')
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
- 響應
r.url:返回請求網站的 URL
r.status_code:返回響應的狀態碼
r.encoding:返回響應的編碼方式
r.cookies:返回響應的 Cookie 信息
r.headers:返回響應頭
r.headers[‘host’]:返回響應頭某屬性
r.content:返回 bytes 類型的響應體
r.text:返回字符串,也就是頁面文本
r.content: 返回內容的二進制形式
r.json():返回josn字典
最常用也就get/post,常用參數
url
cookie
params get形式的參數
data post形式的參數
headers 修改請求頭,偽裝瀏覽器等等
timeout 超時時間
proxies 設置代理
舉個荔枝,請求百度
# encoding:utf-8
import requests
head = {
'User-Agent': '',
'Referer': '11111'
}
values = {
'name': 'cat',
'id': '1'
}
proxy = {"http": "http://127.0.0.1:8080"}
cookie = {'name': 'gggg'}
site = "http://www.baidu.com/"
# 請求方式主要為get傳值用params,post傳值用data
#response = requests.get(url=site,headers=head,params=values,proxies=proxy,cookies=cookie, timeout=3)
response = requests.post(url=site, headers=head, data=values, proxies=proxy, cookies=cookie)
print(response)
print(response.url)
print(response.cookies)
print(response.status_code)
print(response.encoding)
print(response.content)
print(response.headers)
print(response.url)
print(response.text)
print(response.json())
print(response.history)
BeautifulSoup模塊:
簡單來說,Beautiful Soup是python的一個庫,最主要的功能是從網頁抓取數據,將 html 解析為對象進行處理。
BeautifulSoup 不僅支持 HTML 解析器,還lxml,XML,html5lib 解析器,需要安裝相應的庫。如果不安裝,則 Python 會使用 Python 默認的解析器,其中 lxml 解析器推薦
一般BS4將HTML文檔對象會轉換成如下四種類型組合的文檔樹:
- Tag:標簽對象
- NavigableString:字符內容, soup.p.string
- BeautifulSoup:表示的是一個文檔的全部內容
- Comment:特殊類型的NavigableString, 如果標簽中有注釋,則是 comment 對象,可通過 if type(soup.p.string) != bs4.element.Comment:.判斷
主要還是Tag也就是標簽,如html頁面中的
,
等等都是tag,而Beautiful Soup可以輕松獲取 各種Tags
如:
soup.title
soup.head
soup.a
soup.p
soup.p.name #p標簽的名字
soup.p.string #p標簽的內容
soup.p.attrs #p標簽的屬性,返回的是一個字典
soup.p['class'] #p標簽的class屬性
需求總是多樣的,也可以利用find() 和 find_all()是這兩個函數,可以準確的通過標簽的不同屬性輕松地過濾 HTML 頁面,查找需要的標簽組或單個標簽。唯一的區別是 find_all() 方法的返回結果是值包含一個元素的列表,而 find() 方法直接返回結果.這個語句可以完美詮釋兩者關系:
soup.find_all('title', limit=1)==soup.find('title')
主要介紹find_all() 方法搜索當前tag的所有tag子節點,并判斷是否符合過濾器的條件。
find_all( name , attrs , recursive , text , **kwargs )
name :查找所有名字為 name 的tag,字符串對象會被自動忽略掉;
attrs:根據屬性查詢,使用字典類型;
text :可以搜搜文檔中的字符串內容.與 name 參數的可選值一樣, text 參數接受字符串 , 正則表達式 , 列表, True ;
recursive:調用tag的 find_all() 方法時,Beautiful Soup會檢索當前tag的所有子孫節點,如果只想搜索tag的直接子節點,可以使用參數 recursive=False ;
limit:find_all() 方法返回全部的搜索結構,如果我們不需要全部結果,可以使用 limit 參數限制返回結果的數量.效果與SQL中的limit關鍵字類似,當搜索到的結果數量達到 limit 的限制時,就停止搜索返回結果;
class_ :通過 class_ 參數搜索有指定CSS類名的tag,class_ 參數同樣接受不同類型的 過濾器 ,字符串,正則表達式,方法或 True。
是不是想說什么亂七八糟的,舉個栗子看看,看完還可以吃了
# encoding:utf-8
from bs4 import BeautifulSoup
import re
html = '''
'''
soup = BeautifulSoup(html, 'html.parser')
# 根據name查詢節點
print("name為ul的節點:", soup.find_all(name='ul'))
# 根據attrs查詢節點
print('根據attr查詢節點:', soup.find_all(attrs={'name': 'one'}))
print('根據attr查詢節點:', soup.find_all(attrs={'class': 'cls5'}))
# 根據text查詢節點
print('根據text查詢節點:', soup.find_all(text='3333333333'))
print('根據text查詢節點1:', soup.find_all(text=re.compile("abc")))
# 根據class_查詢
print('根據class_查詢節點:', soup.find_all(class_='cls3'))
# 根據id查詢
print('根據id查詢節點:', soup.find_all(id='aaa'))
# 設置limit
print('不設置limit:', soup.ul.find_all(name='li'))
print('設置limit為1:', soup.ul.find_all(name='li', limit=2))
如果取其中href,可以
link.a['href'] or link.a.get('href')
也可以通過css類名查找
在查找的時候,如果是標簽名不加任何修飾,如果是類名前加點,如果id名前加#
利用 soup.select() , 返回類型是list
舉個例子:
111
通過標簽名查找
print(soup.select('title')) ##打印出標簽是title的
通過類名查找
print(soup.select('.b')) ##打印出class類名是b的
通過id名查找
print(soup.select('#abc')) ##打印出id名是abc的
組合查找
print(soup.select('p #abc’ b')) ##打印出p標簽中,id=abc,class=b的
屬性查找(注意屬性和標簽屬于同一節點.)
print(soup.select("a[class='b']")) ##打印出a標簽中class屬性是b的
以上的select方法返回的結果都是列表形式,可以遍歷形式輸出,然后用get_text()方法來獲取他的內容
for i in soup.select('a'):
print(i.get_text()) ##打印出a標簽中的文本
urlparse模塊:
-
urlparse.urlparse模塊主要就是將url解析為6個組件,并以元組形式返回,返回的6個部分,分別是:scheme(協議)、netloc(網絡位置)、path(路徑)、params(路徑段參數)、query(查詢)、fragment(片段)。
舉個例子:
Import urlparse
a = urlparse.urlparse(‘https:www.cat.com:8080/cat.php?cat=1’)
輸出的結果為
ParseResult(scheme='https', netloc='www.cat.com:8080', path='/cat.php', params='', query='cat=1, fragment='')
Print a.netloc 為 www.cat.com
Print a.hostname 為 www.cat.com
Print a.port 為 8080
- urlparse.urlsplit和urlparse差不多,將url分為5部分,返回一個包含5個字符串項目的元組:協議、位置、路徑、查詢、片段
-
urlparse.urljoin主要是拼接URL,它以base作為其基地址,然后與url中的相對地址相結合組成一個絕對URL地址.最重要就是看/進行替換添加,如果最后路徑沒有/,即追溯到上一個/進行替換添加
舉個例子:
Import urlparse
A = urlparse.urljoin('http://www.cat.com/cat.php,'dog.php')
輸出為
http://www.cat.com/dog.php
A = urlparse.urljoin('http://www.cat.com/cat.php/,'dog.php')
輸出為
http://www.cat.com/cat.php/dog.php
os、sys模塊:
OS模塊 提供方便的使用操作系統函數的方法,
SYS 模塊 提供可供訪問由解釋器使用或維護的變量和與解釋器進行交互的函數。
簡單來說os負責程序與操作系統的交互,提供程序訪問操作系統底層的接口;sys主要負責程序與python解析器的交換,提供一系列函數與變量,用于操控pyhton的運行環境。
- os 常用方法
os.name:返回當前使用平臺的代表字符,Windows用 nt 表示,Linux用 posix 表示
? os.listdir(path):列舉目錄下的所有文件。返回的是list類型。
? os.getcwd():查看當前所在路徑。
? os.system(command):函數用來運行shell命令。
? os.curdir:返回當前目錄('.')
? os.chdir(dirname):改變工作目錄到dirname
? os.path.isfile(path):檢驗給出的路徑是不是文件。
? os.path.isdir(path):檢驗給出的路徑是不是目錄。
? os.path.exists():用來檢驗給出的路徑是否真地存在
? os.path.dirname(path):返回文件路徑
? os.path.basename(path):返回文件名
? os.path.join(path, name):連接目錄與文件名或目錄,使用‘\’連接
? os.path.splitext():分離文件名與擴展名
? os.path.split(path):將path分割成目錄和文件名二元組返回。
? os.path.normpath(path):規范path字符串形式
? os.path.abspath(name):獲得絕對路徑
? os.path.getsize(name):獲得文件大小,如果name是目錄返回0L
? os.mkdir(path):創建path目錄(只能創建一級目錄)
? os.makedirs(path):創建多級目錄
? os.remove(path):函數用來刪除一個文件。
? os.rmdir(path):刪除path目錄(只能刪除一級目錄,如'/Users/XXX/SSS',只刪除SSS目錄)
? os.removedirs(path):刪除多級目錄(如'/Users/XXX/SSS',必須為空目錄,刪除SSS、XXX目錄)
? os.path.getmtime(path):返回文件或目錄的最后修改時間,結果為秒數
? os.path.getatime(path):返回文件或目錄的最后訪問時間,結果為秒數
? os.path.getctime(path):返回文件或目錄得創建時間,結果為秒數
? os.sep:返回當前操作系統特定的路徑分隔符
? os.linesep:返回當前平臺使用的行終止符
? os.extsep:返回文件名與擴展名的分隔符
-
sys 常用方法
sys.argv 實現從程序外部向程序傳遞參數。簡單來說就是cmd中命令行參數,返回是一個List,第一個元素是程序名,第二個即輸入第二個參數,以此類推。
Python 1.py www.cat.com 10
Sys.argv[0]=1.py
Sys.argv[1]=www.cat.com
Sys.argv[2]=10
sys.modules.keys() #返回所有已經導入的模塊列表
sys.exc_info() #獲取當前正在處理的異常類,exc_type、exc_value、exc_traceback當前處理的異常詳細信息
sys.exit(n) #程序,正常退出時exit(0)
sys.hexversion #獲取Python解釋程序的版本值,16進制格式如:0x020403F0
sys.version #獲取Python解釋程序的版本信息
sys.maxint #最大的Int值
sys.maxunicode #最大的Unicode值
sys.modules #返回系統導入的模塊字段,key是模塊名,value是模塊
sys.path #返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值
sys.platform #返回操作系統平臺名稱
sys.stdout #標準輸出
sys.stdin #標準輸入
sys.stderr #錯誤輸出
sys.exc_clear() #用來清除當前線程所出現的當前的或最近的錯誤信息
sys.exec_prefix #返回平臺獨立的python文件安裝的位置
sys.byteorder #本地字節規則的指示器,big-endian平臺的值是'big',little-endian平臺的值是'little'
sys.copyright #記錄python版權相關的東西
sys.api_version #解釋器的C的API版本
sys.version_info #獲取Python解釋器的版本信息
sys.getwindowsversion #獲取Windows的版本
sys.getdefaultencoding #返回當前你所用的默認的字符編碼格式
sys.getfilesystemencoding #返回將Unicode文件名轉換成系統文件名的編碼的名字
sys.setdefaultencoding(name) #用來設置當前默認的字符編碼
sys.builtin_module_names #Python解釋器導入的模塊列表
sys.executable #Python解釋程序路徑
sys.stdin.readline #從標準輸入讀一行,sys.stdout.write("a") 屏幕輸出a
optparse模塊:
optparse可以說是sys.argv的升級版主要用來為腳本傳遞cmd中命令參數,采用預先定義好的選項來解析命令行參數。
parser.add_option()是為解析器添加選項,定義命令行參數常用的五種即
action:存儲方式,分為三種store、store_false、store_true
type:類型
dest:存儲的變量
default:默認值
help:幫助信息
舉個橘子:
簡單來說就是創建optparse對象parser,使用add_option()來定義命令行參數,最后利用parse_args()來解析命令行。
# coding=utf-8
import optparse
parser=optparse.optionParser("python %prog -u host -p port") #創建一個對象實例,()中用于cmd提示,可以省略 %prog=程序名。
parser.add_option('-u',dest='Host',type='string',help='test host')
parser.add_option('-p',dest='Ports',type='string',help='test ports',default="80,8080") ##需要的命令行參數 默認-h查看
(options,args)=parser.parse_args() # 傳遞一個參數列表給parse_args(),只要知道命令行參數名即dest,如host,就可以訪問其對應的值:options.host。
print(options.Host)
print(options.Ports)
socket模塊:
Socket也就是套接字,使用的時候每一個socket,都被綁定特定的IP地址和端口,主要實現網絡上兩個程序上的數據交換。
簡單來說就是本地建立socket,被訪問的服務器也建立一個socket監聽,兩端用各種的socket及進行數據交換
-
服務端
首先要創建sockert對象
Sock_server = socket.socket(family,type)
Family參數代表地址家族,分為AF_INET(IPV4網絡通信)和AF_UNIX(同一主機進程通信)和AF_INET6(IPV6通信)
Type參選為套接字類型,分為SOCK_STREAM(tcp流套接字)和SOCK_DGRAM(udp數據包套接字)和SOCK_RAW(可以監聽所有數據幀)和SOCKE_RDM(可靠udp形式,保證交付數據)
舉個蘋果吧,直接創建個socket服務端
# coding=utf-8
import socket
#服務端
sock_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #創建一個ipv4,tcp連接對象
sock_server.bind(("127.0.0.1",8888)) #綁定主機名和端口
sock_server.listen(2) #設置服務端,最多可以被多少客戶連接
connection,address =sock_server.accept()#服務端通過accept等待客戶請求連接,連接建立時,返回新的connection對象(通過這個新的對象與客戶端通訊),和address客戶端地址
connection.send('i am servce ') #服務器和客戶端通過“send”發送byte和“recv”接受方法通信:
mess = connection.recv(1024) #接受多大字節
print(mess)
connection.close() #先關閉新對象,在關閉最開始對象
sock_server.close()
- 客戶端
# coding=utf-8
import socket
sock_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_client.connect(("127.0.0.1",8888)) #使用connect方法連接服務器
mess = sock_client.recv(1024)
print(mess)
sock_client.send('i am client')
sock_client.close()
thread和threading模塊:
**余生很長,請多指教。**
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
