requests模塊javascript
- 一、爲何是requests模塊 - python原生一個基於網絡請求的模塊,模擬瀏覽器發起請求 - 二、爲何要使用requests模塊 - 一、自動處理url編碼 urllib.parse.quote() - 二、自動處理post請求的參數 urllib.parse.urlencode(parmre) 再轉字節 - 三、簡化cookie和代理的操做 - 三、requests如何被使用 - 安裝:pip install requests - 使用: 一、指定url 二、發請求 三、獲取響應數據 四、持久化存儲 - 四、經過5個基於requests模塊的爬蟲項目對該模塊進行系統學習和鞏固 - get 請求 - post 請求 - ajax get - ajax post - 綜合
- 需求:爬起搜狗首頁的頁面數據
import requests
# 指定url
url = 'https://www.sogou.com/'
# 發起請求
res = requests.get(url=url)
# 獲取數據:text能夠獲取響應對象中字符串形式的頁面數據
data = res.text
# 持久化存儲
with open('get.html','w',encoding='utf-8') as f:
f.write(data)
print('Save Ok')
# response響應對象的經常使用屬性
import requests
url = 'https://www.sogou.com/'
res = requests.get(url)
# content 獲取的是響應對象中二進制bytes類型的頁面數據
# print(res.content)
# 獲取二進制流:好比下視頻時。若是視頻10g,用response.content而後一會兒寫到文件中是不合理的。
# res = requests.get('xxx',stream=True)
# with open('movie.mp4','wb')as f:
# for line in res.iter_content():
# f.write(line)
# status_code 返回一個相應狀態碼 200
print(res.status_code)
# 返回響應頭信息 dict類型
# print(res.headers)
# 獲取請求的url
print(res.url)
# 編碼問題
# 有些網站返回的數據不是utf-8編碼格式
# res.encoding='gbk'
# 解析json
import json
res1 = json.load(res.text) # 太麻煩
# 一步到位
res2 = res.json()
import requests
url = 'https://www.sogou.com/web'
res = requests.get(url=url,params={'query':'江子牙'})
with open('jiangziya.html','w',encoding='utf-8') as f:
f.write(res.text)
print('請求的URL:',res.url)
print('Save Ok')
# requests自定義請求頭信息:假裝成瀏覽器
import requests
url = 'https://www.sogou.com/web'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
res = requests.get(url=url,params={'query':'江子牙'},headers=headers)
# get也能夠攜帶cookie發送請求:
# res = requests.get(url=url,params={'query':'江子牙'},headers=headers,cookies=cookies)
print(res.status_code)
- 需求:登陸豆瓣網,獲取登陸成功後的頁面數據
import requests
url='https://accounts.douban.com/login'
data={
'form_email':'13006293101',
'form_password':'jw19961019',
}
res = requests.post(url=url,data=data)
print(res.status_code)
html = res.content
with open('douban_login.html','wb') as f:
f.write(html)
print('登陸成功')
# 補充:
headers = {
'content-type':'application/json'
}
# 沒有指定請求頭時,默認使用x-www-form-urlencode請求頭
# request.post(url='xxx',data={'a':1,'b':2})
# 指定請求頭爲application/json時。使用data傳值,服務端取不到值
# request.post(url='xxx',data={'a':1,'b':2},headers=headers)
# 不指定,可是指定json傳值,就意味這使用application/json請求頭
# requests.post(url='',json={'a':1,})
- 需求:爬取豆瓣網電影詳情的數據
import requests
url = 'https://movie.douban.com/j/new_search_subjects'
parmrs = {
'sort': 'U',
'range': '0,10',
'tags':'' ,
'start': 40,
'genres': '愛情',
}
# 自定義請求頭信息
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'
}
res = requests.get(url=url,params=parmrs,headers=headers)
print(res.url)
import json
with open('douban_movie.json','w',encoding='utf-8') as f:
json.dump(res.text,f,ensure_ascii=False)
- 需求:爬取肯德基城市餐廳位置的數據
import requests
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
data = {
'cname':'',
'pid': '',
'keyword': '江西',
'pageIndex': 1,
'pageSize': 20,
}
res = requests.post(url=url,data=data)
print(res.url)
import json
with open('kfc.json','w',encoding='utf-8') as f:
json.dump(res.text,f,ensure_ascii=False)
- 需求 爬取搜狗知乎一個詞條對應必定範圍內頁碼錶示的頁面數據
# 前三頁的頁面數據 一、二、3
import requests,os
if not os.path.exists('pages'):
os.mkdir('pages')
word = input('輸入你要搜索的關鍵詞:')
start_page = int(input('輸入要獲取的起始頁碼:'))
end_page = int(input('輸入要獲取的結束頁碼:'))
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
url = 'https://zhihu.sogou.com/zhihu?'
for page in range(start_page,end_page+1):
params = {
'query':word,
'page':page,
'ie':'utf-8'
}
res = requests.get(url=url,headers=headers,params=params)
print(res.url)
file_name = word+str(page)+'.html'
file_path = os.path.join('pages',file_name)
with open(file_path,'w',encoding='utf-8') as f:
f.write(res.text)
print('第%s頁搜索成功'%page)