模塊的安裝css
-----------------------基礎用法---------------------html
GET用法、POST用法python
-----------------------進階用法--------------------web
cookie處理、代理ip、session json
1). 安裝requests包仍是很方便的,電腦中有python環境,打開cmd,輸入pip install requests下載;瀏覽器
若是有同窗使用pycharm的話,選擇file-->setting-->Project interpreter-->右邊"+"號點擊--->輸入模塊名---->選中下載。安全
2). requests的做用、特色、以及使用流程服務器
做用:模擬用戶使用瀏覽器上網cookie
特色:簡單、高效session
使用流程:
指定url;
發起請求(requests.get/post);
獲取響應信息/數據(response);
持久化存儲(保存csv、MySQL、txt等);
1). get(url,headers,params):各用法
獲取搜狗首頁的頁面數據:
1 import requests #引包 2 #1指定url 3 url = 'https://www.sogou.com/' 4 #2.發起請求 5 response = requests.get(url=url) 6 #3獲取響應數據 7 page_text = response.text #text返回的是字符串類型的數據 8 #持久化存儲 9 with open('./sogou.html','w',encoding='utf-8') as fp: 10 fp.write(page_text) 11 print('over!') 12 #也能夠直接打印 13 print(page_text) #這就是服務器給咱們返回的數據信息(response)
2). headers的使用:
若是沒有假裝UA,你發送的請求中的UA是一個爬蟲標識;並且如今大部分網站都是有UA檢測(反爬機制),因此咱們須要UA假裝(反反爬策略)騙過網站,
咱們能夠打開網站,F12,隨意點擊一個信息,找到Headers這個標籤,翻到最下面有一個 User-Agent ,在python中咱們須要對他進行構造。
python中有一個隨機生成UserAgent的包----fake-useragent,它的安裝方法也很簡單,pip install fake-useragent。
3). 下面實現上面headers的構造:
1 #第一種方法 2 #user-agent放在字典中,不光useragent,後面咱們講到的cookie等都須要放入 3 import requests 4 headers== { 5 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 6 } 7 #調用方法,get(傳入了兩個參數,url,headers) 8 response = requests.get("http://www.baidu.com",headers=headers)
使用fake-useragent獲取並構造UA:
import requests from fake_useragent import UserAgent ua = UserAgent() headers = {'User-Agent': ua.random} url = '待爬網頁的url' resp = requests.get(url, headers=headers)
4). params 參數
咱們使用一個例子來融合headers與params,仍是以搜狗爲例:
1 import requests 2 wd = input('enter a word:') 3 url = 'https://www.sogou.com/web' 4 #參數的封裝 5 param = { 6 'query':wd 7 } 8 #UA假裝 9 headers = { 10 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 11 } 12 response = requests.get(url=url,params=param,headers=headers) 13 #手動修改響應數據的編碼 14 response.encoding = 'utf-8' 15 page_text = response.text 16 fileName = wd + '.html' 17 with open(fileName,'w',encoding='utf-8') as fp: 18 fp.write(page_text) 19 print(fileName,'爬取成功!!!')
上面的例子能夠看出,若是須要將參數放在url中傳遞,能夠利用 params 參數 。
5)post用法:咱們訪問網站的時候,有時候是須要提交數據給網頁的,若是提交的數據中沒有網站所認證的信息,那麼網站將會返回給你錯誤或者其餘信息。
最基本的POST請求:
1 response = requests.post("http://www.baidu.com/",data=data)
傳入數據的以後就不須要使用urlencode進行編碼了。
實例(實現百度翻譯):
1 import requests 2 #破解百度翻譯 3 url = 'https://fanyi.baidu.com/sug' 4 word = input('enter a English word:') 5 #請求參數的封裝 6 data = { 7 'kw':word 8 } 9 #UA假裝 10 headers = { 11 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 12 } 13 response = requests.post(url=url,data=data,headers=headers) 14 #text:字符串 json():對象 15 json_dict = response.json() 16 17 print(json_dict)#返回是一個json列表,進行數據提取便可
如今大部分的網站都是經過動態加載(Ajax)該技術加載信息,有的網站防止數據的泄露或者用戶隱私安全,會設置js、css字體加密等等;後面有機會在介紹。再舉個例子以下,爬取肯德基餐廳位置:
1 #爬取任意城市對應的肯德基餐廳的位置信息 2 #動態加載的數據 3 city = input('enter a cityName:') 4 url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' 5 #數據封裝 6 data = { 7 "cname": "", 8 "pid": "", 9 "keyword": city, 10 "pageIndex": "2", 11 "pageSize": "10", 12 } 13 #UA假裝 14 headers = { 15 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 16 } 17 #返回的數據 18 response = requests.post(url=url,headers=headers,data=data).text 19 print(response)#打印
有人會問怎麼看咱們須要傳輸什麼參數呢?咱們打開網站幣乎網站,點擊登陸,打開開發者模式(谷歌瀏覽器),輸入帳號密碼後,在標籤爲Network中的Headers中最下面的Request payload中。如圖所示:
咱們可使用模擬參數進行登陸(大部分網站進行加密);在後面會講解谷歌的一些操做以及加密的數據的解決方式,這裏暫時略過。
學習以前簡單的瞭解一下cookie是作什麼的,有什麼做用;咱們在百度上搜索一下,會出來不少的關於cookie的介紹,我截取了一段:
Cookie的做用:
cookie的用途是存儲用戶在特定網站上的密碼和 ID。另外,也用於存儲起始頁的首選項。在提供我的化查看的網站上,將利用計算機硬驅上的少許空間來儲存這些首選項。這樣,每次登陸該網站時,瀏覽器將檢查是否有cookie。若是有,瀏覽器將此 cookie 隨網頁的請求一塊兒發送給服務器 ,有一個基礎的概念就行;
接下來咱們獲取一下cookies:
1 import requests 2 #網址 3 url ="http:///www.baidu。com」 4 #返回響應 5 response = requests.get(url) 6 #獲取請求網頁的cookies 7 #打印出cookies 8 print(response.cookies)##RequestCookieJar類型,咱們使用items方法將其轉換成元組,遍歷美每一個cookie的的名稱跟值。 9 #第一種方法 10 for k,v in response.cookies.items(): 11 print(k +"="+ v) 12 #第二種方法 13 print(resp.cookies.get_dict())
咱們也可使用cookie來維持咱們在網站上的登陸狀態,以我學校的網站爲例(能夠自行找登陸網站),首先登陸網站,打開F12,進入network面板----headers中,將cookies複製下來放進咱們構造的headers中;
1 import requests 2 3 headers = { 4 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36", 5 "Cookie": "JSESSIONID=加密字符串" 6 } 7 8 r = requests.get(url,headers=headers) 9 10 print(r.text)
運行之後就會發現返回來的信息中有登錄後的結果,證實登陸成功。
多個請求之間是能夠共享cookie
的。那麼若是使用requests
,也要達到共享cookie
的目的,那麼可使用requests
庫給咱們提供的session
對象。注意,這裏的session
不是web開發中的那個session,這個地方只是一個會話的對象而已。
上面的解釋可能有些抽象,打個比方你在爬取一個網站,第一次請求利用post登陸了網站,第二次想獲取登陸成功後的信息,你再使用get方法請求我的信息頁面,你發現請求不到,實際上上面的兩個操做是打開了兩個瀏覽器,是徹底不一樣的。
因此有需求就有解決方案,這樣咱們就引出session對象,它能夠維持同一個會話,也就是打開一個瀏覽器的新標籤頁;這樣就防止咱們登錄後獲取不到信息的煩惱。
以登陸人人網爲例,使用requests
來實現。示例代碼以下:
1 import requests 2 3 url = "http://www.renren.com/PLogin.do" 4 data = {"email":"email",'password':"password"} 5 headers = { 6 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" 7 } 8 9 # 登陸 10 session = requests.session() 11 #提交參數信息 12 session.post(url,data=data,headers=headers) 13 14 # 訪問大鵬我的中心 15 resp = session.get('http://www.renren.com/880151247/profile') 16 17 print(resp.text)
注:session一般用於模擬登陸成功後進行下一步操做。
代理ip的使用場合:對於某些網站,咱們測試的時候請求幾回能夠獲取網頁內容,可是當大規模且頻繁的請求,網站可能出現驗證碼、或者跳到登陸認證頁面,更有的會直接封掉客戶端IP,致使必定的時間內沒法訪問。
爲了防止這種狀況的發生,咱們須要進行代理操做,代理其實就是代理服務器,代理網站的話自行百度一下。
代理的詳情:https://www.kuaidaili.com/doc/wiki/
代理分爲下面幾種類型:
-匿名度:
- 透明:對方服務器能夠知道你使用了代理,而且也知道你的真實IP
- 匿名:對方服務器能夠知道你使用了代理,但不知道你的真實IP
- 高匿:對方服務器不知道你使用了代理,更不知道你的真實IP。
- 類型:
- http:該類型的代理ip只能夠發起http協議頭對應的請求
- https:該類型的代理ip只能夠發起https協議頭對應的請求
設置代理的方式:
1 import requests 2 proxies = { 3 "http":"ip:端口", 4 "https":"ip:端口", 5 } 6 requests.get(url,proxies=proxies)
requests的get和post方法經常使用的參數:
url
headers
data/params
proxies
你可能看會了,可是你敲了嗎?
初學者