requests 功能和 urllib一樣
將cookies 和 http變成了引數
re = requests.get(
'')re = requests.post(
'')
print
(re.text)
# 會亂碼,requests轉馬時基於http頭部推測轉碼
print
(re.encoding)
# 一般都轉為iso-8859-1
手動轉碼
re.encoding =
'utf-8'
print
(re.text)
print
(re.json())
print
(re.content.decode(
))
def
request
(self, method, url,
params=
none
, data=
none
, headers=
none
, cookies=
none
, files=
none
, auth=
none
, timeout=
none
, allow_redirects=
true
, proxies=
none
, hooks=
none
, stream=
none
, verify=
none
, cert=
none
, json=
none
):
'''表單中,多個元素使用同一key的時候,可用元組傳參data = (('key1', 'value1'), ('key1', 'value2'))'''
data =((
'key1'
,'value1'),
('key1'
,'value2'))
print
(requests.post(
'', data=data)
.headers)
print
(requests.post(
'', data=data)
.cookies)
引數:allow_redirects=false 取消自動重定向
"""重定向"""
r = requests.get(
'', allow_redirects=
false
)# 禁止重定向
print
(r.headers)
print
(r.url)
print
(r.history)
# 歷史記錄,從哪個**跳轉過來的
url =
''r = requests.get(url, stream=
true
)for chunk in r.iter_content(chunk_size=
1024):
print
(chunk)
"""
session 會話物件,所有會話物件發出的請求 會自動保持狀態
同一主機傳送多個請求,會重用tcp鏈結
使用socket是會先connect鏈結網頁也就是建立tcp鏈結,因此session重用會快很多
"""import time
import urllib.request
s = requests.session(
)# session所有api和requests相同
start_time = time.time(
)for i in
range(50
):# r = urllib.request.urlopen('')
# r = requests.get('')
r = s.get(
'')# 明顯快於前兩種,因為會重用tcp鏈結
print
('耗時{}s'
.format
(time.time(
)-start_time)
)
"""手動新增cookies"""
以蔡xx的微博為例
headers =
r = requests.get(
'', headers=headers)
r.encoding =
'utf-8'
print
(r.text)
引數
hostname to the url of the proxy."""
加**的方式
proxy =
print
(requests.get(
'', proxies=
))
"""
需求1.請求首頁位址,匹配每乙個帖子的詳情頁url
2.分頁請求
"""import requests
import re
import threading
defparse
(word, pn)
: url =
''.format
(word, pn)
r = requests.get(url)
.content.decode(
)# print(r)
article_urls = re.findall(r', r, re.s)
# print(article_urls)
return article_urls
defparse_detail
(article_urls)
:for article_url in article_urls:
article_req = requests.get(
''+article_url[0]
).text
# print(article_req)
author = re.findall(r'author: "(.*?)"'
, article_req, re.s)
# print(author)
create_time = re.findall(r'>1樓
(.*?)'
, article_req, re.s)
# print(create_time)
if author and create_time:
print(.
format
(author, article_url[1]
, create_time)
)if __name__ ==
'__main__'
: word =
input
("請輸入貼吧名字:"
) t_list =
for pn in
range(0
,201,50
):# 獲取詳情頁
article = parse(word, pn)
# 對每個詳情頁請求
t = threading.thread(target=parse_detail, args=
(article,))
# 不要立即啟動執行緒,先追加到乙個列表,之後一起啟動
# t.start()
# 啟動
for t in t_list:
t.start(
)# 等待所有執行緒結束
for t in t_list:
t.join(
)
requests庫的使用
import requests 引用模組 帶引數請求 get引數例項 requests.get params 或url payload accept encoding gzip accept language zh cn,zh q 0.8 referer res1 requests.get url,...
requests庫的使用
1.requests庫概述 requests庫是乙個簡潔且簡單處理http請求的第三方庫,它的最大優點是程式編寫過程更接近正常url訪問過程。這個庫建立在python語言的urlib3庫的基礎上,類似這種在其他函式庫之上再封裝功能,提供更友好函式的方式在python語言中十分常見。在python生態...
requests庫的基本使用
import requests response requests.get 檢視響應內容,返回的是已經解碼的內容 response.text 伺服器返回的資料,已解碼。解碼型別 根據http頭部對響應的編碼做出有根據的推測,推測的文字編碼 print type response.text print...