requests 的安裝很是方便:直接pip直接安裝html
pip install requests
實現get請求python
import requests r = requests.get('https://www.baidu.com') print(type(r)) print(r.status_code) # 重點 ,查看狀態嗎 print(r.text) print(r.cookies)
若是要在url附加額外的信息chrome
data = { 'name':'germey', 'age':'22' } r = requests.get('http://httpbin.org/get',params = data) print(r.url) # 這樣參數就很是簡單的添加到url裏面去了,用過 urllib的同窗應該知道,在urllib裏添加信息又要轉字節流。 print(r.text) ########################## 運行結果: http://httpbin.org/get?name=germey&age=22 { "args": { "age": "22", "name": "germey" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4" }, "origin": "121.17.176.240", "url": "http://httpbin.org/get?name=germey&age=22" }
咱們觀察上面的返回結果,發現結果是json格式的。可是它實際上的類型是 str類型。有麼有一種方法直接返回字典格式的結果。json
print(type(r.text)) print(r.json()) print(type(r.json())) a = r.json() print(a['args']) # 這樣就能夠很方便的提取網頁中的 json 數據了。 可是要注意的是,若是返回結果不是json格式,就會出現解析錯誤。 ******************************* 運行結果: <class 'str'> {'args': {'age': '22', 'name': 'germey'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}, 'origin': '121.17.176.240', 'url': 'http://httpbin.org/get?name=germey&age=22'} <class 'dict'>
在服務端通常都會讀取網頁的 headers請求頭,若是發現請求頭爲一些網絡爬蟲的請求頭,就或拒絕訪問,以下:瀏覽器
import requests r = requests.get('https://www.zhihu.com/explore') print(r.text) ''' 看下面結果,就會發現給出了請求錯誤的提示信息 ''' *************************** <html> <head><title>400 Bad Request</title></head> <body bgcolor="white"> <center><h1>400 Bad Request</h1></center> <hr><center>openresty</center> </body> </html>
chrome 的請求頭cookie
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
火狐瀏覽器的請求頭網絡
User-Agent:Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0 ************************* headers = { 'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0' } r = requests.get('https://www.zhihu.com/explore',headers=headers) print(r.status_code) print(r.text) # 這樣咱們就能夠很是輕鬆的獲得知乎的結果了。
抓取網絡上的圖片app
import requests r = requests.get('https://www.autocar.co.uk/sites/autocar.co.uk/files/styles/gallery_slide/public/images/car-reviews/first-drives/legacy/911t-0357.jpg?itok=VJsdq9hv',timeout=2) with open('911.png','wb') as f: f.write(r.content) # 這張愛車的圖片就出如今你的文件夾裏了。
使用post請求ide
import requests data = {'name':'yang','age':'22'} r =requests.post('http://httpbin.org/post',data=data) print(r.text) print(r.url) # 咱們查看結果獲得,咱們post的結果已經顯示到了網頁當中。可是url並無發生任何變化,實際上是post是將數據寫在了請求體中發送過去的。 ******************************** { "args": {}, "data": "", "files": {}, "form": { "age": "22", "name": "yang" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Content-Length": "16", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4" }, "json": null, "origin": "121.17.176.240", "url": "http://httpbin.org/post" } http://httpbin.org/post
響應:發送過去結果以後,一定會獲得響應。此外,還有不少別的方法來獲取其餘的信息,如狀態碼、響應頭、Cookies等post
import requests r= requests.get('https://www.baidu.com') print(r.status_code) # 返回狀態碼 print(r.headers) #返回headers頭 print(r.cookies) # 返回Cookies print(r.url) # 返回url print(r.history) # 返回請求歷史
一下網站須要提交一些數據。假若有的網站須要上傳文件,咱們如何實現呢。
import requests files = {'files':open('911.png','rb')} r = requests.post('http://httpbin.org/post',files=files) print(r.text) # 這樣咱們就上傳完成了文件
cookies:
獲取cookies
import requests headers = { 'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0' } r = requests.get('https://www.baidu.com',headers=headers) for key,value in r.cookies.items(): print(key +'='+value)
使用cookie
import requests headers = { 'cookie': '_zap=aeac411e-6a5e-4dc6-abe3-ce7592902e65; _xsrf=LCk21sqrw5m5bghUuS4FgQkdNSKpSbZD; q_c1=de06444849884f7ba87c58d7178d3a3d|1535102667000|1535102667000; d_c0="ANCmU57jGg6PTpudGgCWcy8QRJFntSWIzEI=|1535102667"; tgw_l7_route=ec452307db92a7f0fdb158e41da8e5d8; capsion_ticket="2|1:0|10:1535617477|14:capsion_ticket|44:NGM2Y2VkOWUwMmExNGRiYmI4N2Y0NmYzZGY4MmJiNzE=|2d886e52a8c2987be5e9169b913e81f7010f4d32f4c8038fd4746e7b2a43b5b7"; z_c0="2|1:0|10:1535617486|4:z_c0|92:Mi4xYmZUVkF3QUFBQUFBMEtaVG51TWFEaVlBQUFCZ0FsVk56dmQwWEFCaFE2SzVRdnN2OHpNQTQtVzc5Z3NfWG1rTnJB|204923349accbf41e153d07746aab92b75ceab7f4b3b391bed36b2cb2d9f06fa"', 'Host' :'www.zhihu.com', 'User-Agent':"'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0'" } r = requests.get('https://www.zhihu.com',headers=headers) print(r.status_code) print(r.text) # 查看結果,就能夠看到登陸成功。
回話維持,當你利用了 get或者 post等方法請求網頁的時候,實力上是打開了不一樣的回話,至關於
你打開了不一樣的瀏覽器,咱們登陸以後,想獲取網頁信息,有不想獲取Cookie,這時候就用到了回話維持。
import requests s= requests.Session() s.get('http://httpbin.org/cookies/set/number/789456123') r = s.get('http://httpbin.org/cookies') print(r.text)
在大規模爬去網頁中,會封禁ip或者調到登陸驗證。爲了防止這個狀況,咱們能夠就須要設置代
import requests proxies = { 'http':'http://192.168.0.1:5555', 'https':'http://192.168.0.1:1085', } requests.get('https://www.taobao.com',proxies=proxies)