爬蟲之Requests庫

requests庫

雖然python的標準庫中urllib模塊已經包含我們平常使用的大多數功能,但是它的API使用起來讓人感覺不太好,而Requests使用起來更加方便

安裝

利用pip 可以非常方便安裝:

pip install requests

發送get請求

  1. 最簡單的發送get請求的方式就是通過requests.get調用:
response=reqquests.get("http://www.baidu.com/")
  1. 添加headers和查詢參數
    如果想要headers,可以傳入headers參數來增加請求頭中headers信息。如果要將參數傳入url,可以利用params參數。具體實例如下:
import requests

kw={'kw':'中國'}
headers={"Use-Agent":}
#params 接收一個字典或者字符串查詢參數,字典類型自動轉化爲url編碼
requests=requests.get("http://www.baidu.com/s",params=kw,headers=headers)
#查看響應內容,requests.text返回的是unicode格式數據
print(requests.text)
#查看響應內容,requests.content返回的是字節數據
print(requests.content)

#查看完整url地址
print(requests.url)

#查看響應頭部字符編碼
print(requests.encoding)

#查看響應碼
print(requests.statu_code)


  1. requests.text和requests.content比較

requests.text實例

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

requests.content實例

#encoding utf-8

import requests
response=requests.get("http://www.baidu.com/")
print(type(response.content))
print(response.content.decode('utf-8'))

4.帶着參數zhongguo訪問百度頁面

import requests
#response=requests.get("http://www.baidu.com/")
#print(type(response.content))
#print(response.content.decode('utf-8'))
kw={'wd':'zhongguo'}
headers={"Use-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'}
#params 接收一個字典或者字符串查詢參數,字典類型自動轉化爲url編碼
response=requests.get("http://www.baidu.com/s",params=kw,headers=headers)
#查看響應內容,requests.text返回的是unicode格式數據
with open('baidu.html','w',encoding='utf-8') as fp:
    fp.write(response.content.decode('utf-8'))

print(response.url)

發送post請求

發送post請求非常簡單,直接調用’request.post’方法就可以
如果返回的是josn數據。那麼可以調用’request.josn()'將josn字符串轉換爲字典或者列表。

response=reqquests.post("http://www.baidu.com/,data-data")

接下來通過訪問拉勾網來演示post請求

#發送post請求

import requests
import time


data={
    'first':"ture",
    'pn':'1',
    'kd':'python'
}

url_start = "https://www.lagou.com/jobs/list_運維?city=%E6%88%90%E9%83%BD&cl=false&fromSearch=true&labelWords=&suginput="
url_parse = "https://www.lagou.com/jobs/positionAjax.json?city=成都&needAddtionalResult=false"
headers = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Referer': 'https://www.lagou.com/jobs/list_%E8%BF%90%E7%BB%B4?city=%E6%88%90%E9%83%BD&cl=false&fromSearch=true&labelWords=&suginput=',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}

s=requests.Session()# 創建一個session對象
s.get(url=url_start,headers=headers,timeout=3)# 用session對象發出get請求,請求首頁獲取cookies
cookie=s.cookies# 爲此次獲取的cookies


response=requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false",data=data,headers=headers,cookies=cookie,timeout=3)
time.sleep(7)
#print(cookie)
#print(type(response.json()))
print(response.text)

通過代理訪問網站

使用代理很簡單,只要在請求的方法中傳遞proxies參數就可以

實例如下:通過代理訪問網站http://httpbin/ip就可以看到ip跟本機不一樣

#通過代理訪問
import  requests
#url="http://httpbin.org/ip"

proxy={
  'http':'171.35.147.108:9999'
}

respones=requests.get("http://httpbin.org/ip",proxies=proxy)
print(respones.text)

處理cookie

如果想要在多次請求中共享cookie,那麼就應該使用session。代碼如下:

#處理cookie
#如果想要在多次請求中共享cookie,那麼就應該使用session。代碼如下:

url="http://www.renren.com/PLogin.do"
data={'email':'','password':''}
headers={
    'Use-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
session=requests.session()
session.post(url,data=data,headers=headers)
respones=session.get('http://www.renren.com/880151247/profile')
with open('renren.html','w',encoding='utf-8') as fp:
    fp.write(respones.text)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章