為什麼要學習requests,而不是urllib
1 requests的底層實現就是urllib
2 requests在python2和python3通⽤,⽅法完全⼀樣
3 requests簡單易⽤
4 requests能夠⾃動幫助我們解壓(gzip壓縮的)⽹⻚內容
作⽤:傳送⽹絡請求,返回相應資料
中⽂⽂檔api:
1 response.content.decode()2
3 response.content.decode(
'gbk')4
5 response.text
6 response.encoding =
'utf-8'
response.text
型別:str
修改編碼⽅式:response.encoding = 'utf-8』
response.content
型別:bytes
修改編碼⽅式:response.content.decode('utf8』)
1 response = requests.get(url)
23 response
的常⽤⽅法:
6 f.write(response.content)
為了模擬瀏覽器,欺騙伺服器,獲取和瀏覽器一致的內容
1 header的形式:字典
23 headers =
6 ⽤法:requests.get(url,params=kw)
# 快速給data中的字典加引號
按ctrl r(.
*?):(.
*)'$1'
:'$2'
,空格需要自己刪除
如果是火狐瀏覽器,可以直接複製data
哪些地⽅我們會⽤到post請求:
1 登入註冊(post⽐get安全)
2 需要傳輸⼤⽂本的時候(post請求對資料⻓度沒有要求)
爬⾍也需要在這兩個地⽅模擬瀏覽器傳送post請求
response=requests.post(
"",data=data,headers=headers)
1
import requests
2 headers =
1314 post_url =
''1516 r = requests.post(post_url,data=post_data,headers=headers)
17print
(r.text)
手機版:
1
import requests
2import json
3import sys
45 query_string = sys.ar**[1]
67 headers =
15 post_url =
''1617 r = requests.post(post_url,data=post_data,headers=headers)
18# print(r)
1920 dict_ret = json.loads(r.content.decode())
2122 ret = dict_ret[
'trans'][
0]['dst']23
print
(ret)
1 requests.get(
'',proxies = proxies)23
# proxies的形式:字典
45 proxies =
案例:
1
import requests
23 proxies =
45 headers =
89 headers =
8# 使⽤session程序請求登入之後才能訪問的位址
9 r = requests.get(
'',headers = headers,cookie = cookie)
1011
with
open
('renren2.html'
,'w'
)as f:
12 f.write(r.text)
1 requests.utils.dict_from_cookiejar 把cookie物件轉化為字典
1
import requests
2 response = requests.get(
'')3 requests.utils.dict_from_cookiejar(response.cookies)
2 請求ssl證書驗證
1 response = requests.get(
'',verify=
false
)
3 設定超時
1 response = requests.get(url,timeout=
10)
4 配合狀態碼判斷是否請求成功
1
assert response.status_code ==
200
url位址的編譯碼
1 requests.utils.unquote(
) 解碼
2 requests.utils.quote(
) 編碼
import requests
from retrying import retry
@retry(stop_max_attempt_number =3)
def_parse_url
(url)
:print
('**執⾏了⼏次?'
) response = requests.get(url,headers=headers,timeout=3)
assert response.status_code ==
200return response.content.decode(
)def
parse_url
(url)
:try
: html_str = _parse_url(url)
except
: html_str =
none
return html_str
if __name__ ==
'__main__'
: url =
''print
(parse_url(url)
)
資料提取:就是從相應中獲取我們想要的資料的過程
資料分類:
由於把json資料轉化為python內建資料型別很簡單,所以爬⾍中,如果我們能夠找到返回json資料的url,就會盡量使⽤這種url
json是⼀種輕量級的資料交換格式,它使得⼈們很容易的進⾏閱讀和編寫。同時也⽅便了機器進⾏解析和⽣成。適⽤於進⾏資料互動的場景,⽐如⽹站前台與後台之間的資料互動
使用json的注意點:
json中的字串都是雙引號
json字串——json.loads()—→python資料型別
json字串←—json.dumps()——python資料型別
curl.trillwork.com
可以直接把curl command生成python requests請求頭
copy→copy as curl (bash)
Python學習之路 turtle篇
import turtle先引用庫 將整個繪圖視為乙個小烏龜的爬行軌跡 turtle.circle a,b a代表圓心離小烏龜的位置 整數在左,負數在右 b代表爬行度數 turtle.fd c c代表前進多少 turtle.pensize d d代表留下的軌跡大小 turtle.pencolor b...
Python學習之路(2)
從list或tuple中取部分元素。list 1,2,3,4 list 0 3 1,2,3 list 2 1 1表示最後乙個,3,4 list 1 2 index 1開始,每兩個取乙個 2,4 list 複製list,1,2,3,4 針對tuple,切片同樣適用可迭代,迭代器,集合型別資料可迭代但不...
Python學習之路2
列表合併 列表合併有extend方法和直接 合併,兩者雖然都能合併列表,且結果相同,但是前者合併列表,不會導致最終合併的列表物件記憶體位址號發生變化,後者會導致記憶體位址好的改變,這也就意味著合併後的列表被重新定義 列表排序 按ascall碼排序 列表排序使用sort方法,格式為l.sort key...