個人網(wǎng)站開發(fā)開題報告青島關(guān)鍵詞優(yōu)化seo
Python爬蟲—requests模塊簡介
requests的作用與安裝
作用:發(fā)送網(wǎng)絡(luò)請求,返回響應(yīng)數(shù)據(jù)
安裝:pip install requests
requests模塊發(fā)送簡單的get請求、獲取響應(yīng)
需求:通過requests向百度首頁發(fā)送請求,獲取百度首頁的數(shù)據(jù)
import requests# 目標(biāo)url
url = 'https://www.baidu.com'# 向目標(biāo)url發(fā)送get請求
response = requests.get(url)# 打印響應(yīng)內(nèi)容
print(response.text)# 獲取響應(yīng)
res = requests.get(url, headers=headers)
print(res)
print(type(res))# 獲取請求的url, 響應(yīng)的編碼方式
print(res.url)
res.encoding = 'utf-8'# 獲取響應(yīng)內(nèi)容,會使用默認(rèn)編碼(有時候會亂碼, 需要指定編碼)
print(res.encoding)
print(res.text)
print(res.content.decode('utf-8'))# 獲取請求狀態(tài)碼
print(res.status_code)# 獲取響應(yīng)對應(yīng)的請求頭
print(res.request.headers)# 獲取相應(yīng)的cookie
print(res.cookies)
response的常用屬性:
- response.text 響應(yīng)體str類型
- response.encoding 從HTTP header中猜測的響應(yīng)內(nèi)容的編碼方式
- response.content 響應(yīng)體bytes類型
- response.status_code 響應(yīng)狀態(tài)碼
- response.requests.headers 響應(yīng)對應(yīng)的請求頭
- response.headers 響應(yīng)頭
- response.cookies 響應(yīng)的cookie(經(jīng)過了set-cookie動作)
- response.url 獲取訪問的url
- response.json() 獲取json數(shù)據(jù)得到內(nèi)容為字典(如果接口響應(yīng)體的格式是json格式時)
- response.ok
? 如果status_code小于200,response.ok返回True。
? 如果status_code大于200,response.ok返回False。
?
response.text和response.content的區(qū)別
- response.text
- 類型:str
- 解碼類型:requests模塊自動根據(jù)HTTP頭部對響應(yīng)的編碼作出有根據(jù)的推測,推測的文本編碼
- 如何修改編碼方式:response.encoding=“gbk/UTF-8”
- response.content
- 類型:bytes
- 解碼類型:沒有指定
- 如何修改編碼方式:response.content.decode(‘utf-8’)
獲取網(wǎng)頁源碼的通用方式:
response.content.decode()
response.content.decode('utf-8')
response.text
requests下載圖片
# 在百度首頁搜索李小龍圖片,然后下載到本地
import requestsurl = 'https://photocdn.sohu.com/20080725/Img258368622.jpg'
res = requests.get(url)
with open('李小龍.jpg', 'wb') as f:f.write(res.content)
import requestsurl = 'https://photocdn.sohu.com/20080725/Img258368622.jpg'
# 請求
res = requests.get(url)
# 寫入
with open('李小龍.jpg', 'wb') as f:# 寫入文件 注意:必須二進制形式f.write(res.content)
發(fā)送帶header請求頭的請求
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}url = 'https://i3.sinaimg.cn/ent/m/c/2010-11-26/U3987P28T3D3159293F326DT20101126121845.jpg'
# 請求
res = requests.get(url, headers=headers)# 寫入
with open('李小龍1.jpg', 'wb') as f:f.write(res.content)
發(fā)送帶參數(shù)的請求
- GET請求
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
kw = {'wd': '李小龍'
}
url = 'https://www.baidu.com/s?'res = requests.get(url, params=kw, headers=headers)
print(res.content.decode('utf-8'))
- POST請求
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
url = 'https://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_web_new_fanyi&sign=NyHAgRlbDg6%2BBbQIiKcntdRriqVIAJSQ%2BxmfU0q7dIE%3D'
# post 攜帶表單數(shù)據(jù)
form_data = {
'from': 'zh',
'to': 'en',
'q': '我愛你中國'
}# 發(fā)送post請求
res = requests.post(url, data=form_data, headers=headers)
print(res.json())