1. 程式人生 > >爬蟲之requests介紹

爬蟲之requests介紹

get() cer 高級用法 alter name www. error 時間 conn

一 介紹

1 介紹:使用requests可以模擬瀏覽器的請求,比起之前用到的urllib,requests模塊的api更加便捷(本質就是urllib3)
2 註意:requests庫發送請求將網頁代碼下載下來之後,並不會執行js代碼,這需要我們分析目標站點,然後發起新的requests請求
3 各種請求方式:常用的是requests.get()和requests.post()
    requests.get(url)
    requests.post(url,data={‘key‘:value})
    requests.put(url,data={‘key‘:‘value‘})
    request.delete(url)
    request.option(url)

二 基於GET請求

1. 基本請求

import requests
response = requests.get(‘http://www.baidu.com‘)
print(response.text)

高級用法:

1. SSL Cert Verification

# 證書驗證(大部分網站都是https)
import requests
response = requests.get(‘https://www.12306.com‘) # 如果是ssl請求,首先檢查證書是否合法,不合法則報錯,程序終止

#改進1:去掉報錯,但是會警告
import requests
response = requests.get(‘https://www.12306.com‘,vertify=False) # 不驗證證書,有警告,返回200


#改進2:去掉報錯,並且去掉警告信息
import requests
from requests.packages import urllib3
urllib3.disable_warning() # 關閉警告
response = requests.get(‘https://www.12306.com‘)

#改進3:加上證書
#很多網站都是https,但是不用證書也可以訪問,大多數情況下都是可以攜帶也可以不攜帶證書
#知乎,百度都是可帶可不帶
#有硬性要求的,則必須帶,比如對於定向的用戶,拿到證書後才有權限訪問某個特定的網站

import requests
response=requests.get(‘https://www.12306.cn‘,

              cert=(‘/path/server.crt‘,‘/path/key‘))
)

2. 使用代理


#官網鏈接: http://docs.python-requests.org/en/master/user/advanced/#proxies


#代理設置:先發送請求給代理,然後由代理幫忙發送(封ip是常見的事情)
import requests
proxies={
‘http‘:‘http://egon:123@localhost:9743‘,#帶用戶名密碼的代理,@符號前是用戶名與密碼
‘http‘:‘http://localhost:9743‘,
‘https‘:‘https://localhost:9743‘,
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)


print(respone.status_code)



#支持socks代理,安裝:pip install requests[socks]
import requests
proxies = {
‘http‘: ‘socks5://user:pass@host:port‘,
‘https‘: ‘socks5://user:pass@host:port‘
}
respone=requests.get(‘https://www.12306.cn‘,
proxies=proxies)


print(respone.status_code)

 

3. 超時設置

#超時設置
#兩種超時:float or tuple
#timeout=0.3 #代表從發出到接收到的總時間
#timeout=(0.1,0.2) #0.1表示鏈接超時 0.2表示接收數據的超時時間

import requests
response=requests.get(‘https://www.baidu.com‘,timeout=0.001)

4. 認證設置

#官網鏈接:http://docs.python-requests.org/en/master/user/authentication/

#認證設置:登陸網站是,彈出一個框,要求你輸入用戶名密碼(與alter很類似),此時是無法獲取html的
# 但本質原理是拼接成請求頭發送
# r.headers[‘Authorization‘] = _basic_auth_str(self.username, self.password)
# 一般的網站都不用默認的加密方式,都是自己寫
# 那麽我們就需要按照網站的加密方式,自己寫一個類似於_basic_auth_str的方法
# 得到加密字符串後添加到請求頭
# r.headers[‘Authorization‘] =func(‘.....‘)

#看一看默認的加密方式吧,通常網站都不會用默認的加密設置
import requests
from requests.auth import HTTPBasicAuth
r=requests.get(‘xxx‘,auth=HTTPBasicAuth(‘user‘,‘password‘))
print(r.status_code)

#HTTPBasicAuth可以簡寫為如下格式
import requests
r=requests.get(‘xxx‘,auth=(‘user‘,‘password‘))
print(r.status_code)

5. 異常處理

# 異常處理
import requests
from requests.exceptions import *

try:
  x=requests.get(‘https://www.baidu.com‘,timeout=0.0001)
except ReadTiomout:
  print(‘訪問超時‘)
except ConnectionError:#網絡不通
  print(‘網絡不通‘)
except RequestException:
  .....

6. 上傳文件

import requests
files = {‘file‘:open(‘a.jpg‘,‘rb‘)}
response=requests.post(url,files=files)

爬蟲之requests介紹