requests模塊相關用法

requests模塊

-1. 什么是requests模塊- python原生的一個基于網絡請求的模塊,模擬瀏覽器發起請求。
-2. 為什么使用requests模塊-1. 自動處理url編碼-2. 自動處理post請求參數-3. 簡化cookie和代理的操作-3. requests模塊如何被使用安裝: pip install requests使用流程:1. 指定url2. 使用requests模塊發送請求3. 獲取響應數據4. 進行持久化存儲-4. 通過5個基于requests模塊的爬蟲項目對該模塊進行系統學習和鞏固-get請求-post請求-ajax的get-ajax的post-綜合

基于requests模塊發起get請求

- 需求:爬取搜狗首頁的頁面數據

import requests 
#指定url
url= 'https://www.sogou.com/'
#發起get請求:get方法會返回成功的響應對象
response = requests.get(url=url)
# 獲取響應中的數據值:text可以獲取響應對象中字符串形式的頁面數據
page_data = response.text
#持久化操作
with open('sogo.html','w',encoding='utf-8') as f:f.write(page_data)
#response對象中其他重要屬性
import requests 
#指定url
url= 'https://www.sogou.com/'
#發起get請求:get方法會返回成功的響應對象
response = requests.get(url=url)response.content     #獲取的是response對象中二進制(byte)類型的頁面數據

response.status_code #返回一個響應狀態碼如200 或404 

response.headers     #返回響應頭信息

response.url         #獲取請求的url

requests模塊如何處理帶參數的get請求(兩種方式)

  • 需求:指定一個詞條,獲取搜狗搜索結果對應的頁面數據
    #方式1
    import requestsurl = 'http://www.sogou.com/web?query=金角大王&ie=utf-8'response = requests.get(url=url)page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:f.write(page_text)
    #方式2
    import requestsurl = 'http://www.sogou.com/web'#將參數封裝到字典中
    params = {'query':'金角大王','ie':'utf-8'
    }response = requests.get(url=url,params=params)
    page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:f.write(page_text)
    #自定義請求頭信息
    import requestsurl = 'http://www.sogou.com/web'#將參數封裝到字典中
    params = {'query':'金角大王','ie':'utf-8'
    }
    #自定義請求頭信息 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    response = requests.get(url=url,params=params,headers=headers)response.status_code

    基于requests模塊發起post請求

    - 需求:登錄豆瓣網,獲取登錄成功后的頁面數據
    - tip 如果找不到post請求,試試輸錯密碼尋找
    - 現在豆瓣改版了,只能獲取到登錄信息cookiesession等類型的東西。但是可以用request.session登錄后繼續獲取頁面
    import requests
    #1 指定post請求的url
    url = 'https://accounts.douban.com/j/mobile/login/basic'#封裝post請求的參數
    data= {'ck': '','name': '13520750458','password': '1123lys','remember': 'false','ticket':'',
    }
    #自定義請求頭信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    #2 發起post請求
    response = requests.post(url=url,data=data,headers=headers)#獲取響應對象中的頁面數據
    page_text = response.text
    print(page_text)
    #持久化操作
    with open('douban.html','w',encoding='utf-8') as f:f.write(page_text)

    基于ajax的get請求

    - 抓取豆瓣電影上的電影詳情的數據
    import requests
    #方式一
    url = 'https://movie.douban.com/j/chart/top_list?type=20&interval_id=100%3A90&action=&start=80&limit=20'
    #自定義請求頭信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    response = requests.get(url=url,headers=headers)
    # print(response.text) #返回的是json格式的數據
    import requests
    #方式二
    url = 'https://movie.douban.com/j/chart/top_list?'
    #封裝ajax中get請求攜帶的參數
    params={'type':'20','interval_id':'100:90','action':'','start':'80','limit':'20',}#自定義請求頭信息
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    response = requests.get(url=url,params=params,headers=headers)
    # print(response.text)  #返回的是json格式的數據

    基于ajax的post請求

    -需求 爬取肯德基城市餐廳的位置數據
    import requestsurl = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    # 處理post請求參數
    data = {'cname':'','pid':'','keyword':'北京','pageIndex':'1','pageSize':'10',
    }
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
    }
    #發起基于ajax的post請求
    response = requests.post(url=url,data=data,headers=headers)response.text
    type(response.text)

    總結

    基于ajax的post和get請求和普通的get請求沒什么區別,唯一不同就是獲取url,ajax要用抓包工具去獲取基于ajax的異步請求的url,因為ajax的地址欄的url不變的,必須去獲取真正的url

  

requests模塊高級(cookie操作):

- cookie:基于用戶的用戶數據- 需求: 爬取張三用戶的豆瓣網的個人主頁頁面數據
- cookie作用:服務器端使用cookie來記錄客戶端的狀態信息
實現流程:1.執行登錄操作(獲取cookie)2.在發起個人主頁請求時,需要將cookie攜帶到該請求中注意:session對象:發送請求(會將cookie對象進行自動存儲)
import requests
#創建session對象
session = requests.session()
#1 發起登錄請求:session對象將cookie獲取,且自動存儲到session對象中
login_url = 'https://accounts.douban.com/j/mobile/login/basic'
data= {'ck': '','name': '13520750458','password': '1123lys','remember': 'false','ticket':'',
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
#使用session對象發起post請求
login_response = session.post(url=login_url,data=data,headers=headers)#2 對個人主頁發起請求(session(cookie)),獲取響應頁面數據
url = 'https://www.douban.com/people/191748483/'
response = session.get(url=url,headers=headers)
page_text = response.textwith open('douban110.html','w',encoding='utf-8')as f:f.write(page_text)print(page_text)

requests模塊高級(代理操作):

- 1 代理:第三方代理本體執行相關的事物
- 2 為什么要使用代理?-反爬手段-反反扒手段
- 3 分類:-正向代理:代理客戶端獲取數據-反向代理:代替服務端提供數據
- 4 免費代理IP的網站提供商:- www.goubanjia.com- 快代理- 西祠代理
- 5 代碼
import requestsurl = 'https://www.baidu.com/s?wd=ip&ie=utf-8'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
#將代理ip封裝到字典,(前面url的協議要與代理ip的協議類型相同,如都是https或http,如果不同需修改url的協議)
proxy = {'https':'222.74.237.246:808'
}
#更換網絡ip
response = requests.get(url=url,proxies=proxy,headers=headers)with open('./daili.html','wb')as f:f.write(response.content)print(response.content)

綜合項目實戰

-需求 爬取搜狗知乎某一個詞條對應一定范圍頁碼表示的頁面數據
import requests
import os# 創建一個文件夾
if not os.path.exists('./pages'):os.mkdir('./pages')
word = input('enter a word')
#動態指定頁碼范圍
start_page = int(input('enter a start pageNum'))
end_page = int(input('enter an end pageNum'))url = 'https://zhihu.sogou.com/zhihu?'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
}
for page in range(start_page,end_page+1):params = {'query':word,'page':page,'ie':'utf-8',      }response = requests.get(url=url,params=params,headers=headers)page_text = response.textfilename = word+str(page)+'.html'filePath = 'pages/'+filenamewith open(filePath,'w',encoding='utf-8') as f:f.write(page_text)print('第%s頁寫入成功'%page)

?



轉載于:https://www.cnblogs.com/lys666/p/10477814.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449248.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2020-3-22

題目一&#xff1a; JavaScript 天小時分鐘和秒倒計時 代碼與解析&#xff1a; <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> *{margin:0;padding:0;list-style:none; } body{font-size:…

TeamViewer13 -- 安裝、使用說明

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Teamviewer13是一款強大的遠程桌面控制工具&#xff0c;同時也是一款非常實用的共享文件傳輸工具&#xff0c;它擁有簡潔的界面以及方便快…

論程序員的自我修煉

摘要&#xff1a;軟件開發是個挑戰&#xff0c;尤其是對于那些完美主義的程序員。為了想要成為更好的程序員&#xff0c;總會開發出一些特別的功能&#xff0c;在軟件設計上想要做到零瑕疵&#xff0c;但事實上&#xff0c;完美的軟件設計是根本不存在的&#xff0c;試著讓你的…

利用 Charles Proxy 下載舊版本 iOS App

一、軟件準備 1、舊版本 iTunes1.IPSW Downloads&#xff1a;https://ipsw.me/2.百度網盤鏈接&#xff1a;https://pan.baidu.com/s/1PO9Z12o-rqZ_JG68zRqEnA 提取碼&#xff1a;fe1v 2、抓包工具 Charles Proxy1.Charles官網鏈接&#xff1a;https://www.charlesproxy.com/2.百…

禪道8.2-9.2.1注入GetShell

漏洞分析附上某老哥的漏洞分析&#xff0c;來了解下原理。 漏洞利用查看版本&#xff1a;訪問Url&#xff1a;http://127.0.0.1/zentao/index.php?modegetconfig即可獲取禪道的版本號以及一些其他的信息&#xff0c;目前漏洞存在于v8.2~v9.2確定版本號之后&#xff0c;我們就…

2020-3-23

題目一&#xff1a; JavaScript 復選框全選和全不選 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> body{font-size:12px;} ul{list-style:none} </style> <script type"te…

Maven 依賴-鏡像倉庫替換為 -- 阿里云鏡像倉庫(飛快實現 pom 引入)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在本地 maven 的 setting 配置文件中加上阿里云鏡像地址就行了&#xff1a; 新增配置內容&#xff1a; <!-- 阿里鏡像倉庫 --><…

cmake 常用命令

1. 使用日期 # 獲取時間 string(TIMESTAMP DATE_TIME "%y-%m-%d %H:%M")# 獲取日期 string(TIMESTAMP DATE_VERSION "%m%d") 轉載于:https://www.cnblogs.com/ziyu-trip/p/10697309.html

愛屋吉屋病死后,鏈家、中原、我愛我家們卻哭不得笑不得

作為互聯網房產中介最快成長為行業獨角獸的愛屋吉屋&#xff0c;還是沒能迎來開春之暖&#xff0c;于2019年2月19日便停止了運營。對于這個享有創造中國房市273天四輪融資的奇跡、估值超過10億美元的速成獨角獸、一代“革命者”、創造世界紀錄的互聯網房產神話等多個美譽企業的…

2020-3-24

題目一&#xff1a; JavaScript 頁面跳轉效果 實現在10秒之后跳轉到指定頁面。 代碼與解析&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <script type"text/javascript"> function countDown(secs,…

清洗腎臟的絕好秘方(圖)

清洗腎臟的絕好秘方&#xff1a;只用香菜&#xff0c;可以在家里嘗試。不用花多少錢就可清洗你的腎臟。經過多年來&#xff0c;我們的腎臟過濾血液&#xff0c;排除鹽&#xff0c;毒素及所有不需要的物質進入我們的身體。隨著時日&#xff0c;鹽毒積累&#xff0c;這需要進行清…

列表 字典

一、列表 1.定義&#xff1a; stus ["s1","s2","s3","s4","s5","s6","s7"] #List 列表 數組用中括號定義&#xff0c;逗號隔開 stus2 [] #空的列表stus3 list() #空的列表 【定義空的列表便于往里…

MySQL執行外部sql腳本文件的命令( source命令執行sql )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 sql腳本是包含一到多個sql命令的sql語句&#xff0c;我們可以將這些sql腳本放在一個文本文件中&#xff08;我們稱之為“sql腳本文件”&…

【案例】數據量猛增,BI分析效率太低怎么破?

2019獨角獸企業重金招聘Python工程師標準>>> 近日&#xff0c;Apache Kylin Innovation Meetup 在上海成功舉辦&#xff0c;有近200位小伙伴來到了現場。此次會議特別邀請到了金融、互聯網等行業的技術伙伴分享了 Kylin 在行業中的實操應用 。今天將首先與大家分享演…

2020-3-25

題目一&#xff1a; JavaScript 數組隨機不重復元素 實際應用可能需要從數組元素中隨機取出幾個元素&#xff0c;并且要保證這幾個元素不重復。 有些數組可能有重復的元素&#xff0c;那么可能需要首先去除這些重復的元素。 代碼與解析&#xff1a; var theArray[1,3,2,4,5,9,…

人生要小心處理的事

被人羞辱——翻臉不如翻身生氣不如爭氣 有個成語叫做“惱羞成怒”&#xff0c;意思就是說&#xff0c;由于羞愧和惱恨而發怒。被人無情羞辱&#xff0c;只要是有自尊心的人都會憤怒&#xff0c;但問題是&#xff0c;憤怒過后你還會剩下什么?你是馬上報復&#xff0c;以牙還牙;…

刷新SWAP分區方法

Linux VPS的使用過程中&#xff0c;SWAP交換分區是一個很重要系統緩存分區。他是在內存不夠用的情況下&#xff0c;從硬盤中臨時分出一部分空間系統當做內存使用。但是&#xff0c;如果SWAP的占用超過30%的時候&#xff0c;系統的性能就會受到影響&#xff0c;這時候就要刷新SW…

您收到一封 2019 阿里云峰會 (北京) 邀請函

為什么80%的碼農都做不了架構師&#xff1f;>>> 摘要&#xff1a; 阿里云峰會&#xff08;北京&#xff09;開發者專場以“云原生和可見的云未來”為主題&#xff0c;不僅涵蓋 2 場重大發布&#xff0c;更設置人工智能、機器學習、實時計算、云原生實踐等國內外最熱…

解決Based on configured schedule, the given trigger ‘triggerGroupName_FREEZE_JOB.triggerName_FREEZE...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題、如下&#xff1a; Caused by: org.quartz.SchedulerException: Based on configured schedule, the given trigger triggerG…

2020-3-26

題目一&#xff1a; JavaScript 獲取第n個li元素 下面有兩種方法 <!DOCTYPE html> <html> <head> <meta charset" utf-8"> <style type"text/css"> ul{list-style:none} </style> <script> window.onloadfunct…