Python學習之路 爬蟲篇 2

2021-10-05 10:51:45 字數 4144 閱讀 7583

為什麼要學習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...