欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python之requests高級用法詳解

 更新時間:2023年10月23日 10:40:29   作者:ZhiHuaWei  
這篇文章主要介紹了Python之requests高級用法詳解,http協(xié)議是無狀態(tài)的,?服務器無法區(qū)分多個請求是否來自同一個人,因此需要用cookie來進行標識,一般如果需要登錄才能訪問的網(wǎng)站就需要發(fā)送cookie信息,需要的朋友可以參考下

設(shè)置請求頭(headers)

在爬蟲操作中,經(jīng)常需要攜帶請求頭信息(比如User-Agent、Referer、Host、Origin、Cookie)才能正常訪問。

User-Agent : 瀏覽器名稱,服務器可以知道該請求是從哪個瀏覽器過來的,在爬蟲中經(jīng)常需要設(shè)置這個參數(shù)來偽裝我們的請求是從瀏覽器中過來的,這個值也是我們最經(jīng)常應用的;Referer : 表示當前請求是從哪個url過來的,在有些反爬蟲請求中,如果不是從指定頁面訪問該請求,就不會有相關(guān)響應;

Host : 標識請求將要達到那臺主機,并會在服務端被驗證,如果不符合,就不能正確處理客戶端的請求;

Origin : 說明最初請求是從哪里發(fā)起的。Referer顯示來源頁面的完整地址,而Origin顯示來源頁面的Origin: protocal+host,不包含路徑等信息,也就不會包含含有用戶信息的敏感內(nèi)容,跟Referer相似,但是Origin只能用于post請求。Referer適用于所有請求;因此Origin較Referer更安全,多用于防范CSRF攻擊;

Cookie : http協(xié)議是無狀態(tài)的, 服務器無法區(qū)分多個請求是否來自同一個人,因此需要用cookie來進行標識,一般如果需要登錄才能訪問的網(wǎng)站就需要發(fā)送cookie信息。

GET請求代碼示例

    # 引入requests庫
    import requests
    
    # 聲明定義請求頭
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 向指定的url發(fā)送請求,并返回
    url = 'https://www.baidu.com/s'
    # 傳入?yún)?shù)
    data = {
        'wd': '中國'
    }
    r = requests.get(url=url, params=data, headers=headers)
    print(r.text)

POST請求代碼示例

    # 引入requests庫
    import requests
    
    # 聲明定義請求頭
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 請求地址
    post_url = 'https://fanyi.baidu.com/sug'
    # 參數(shù)
    form_data = {
        'kw': 'baby'
    }
    # 進行post請求
    req = requests.post(url=post_url, data=form_data, headers=headers)
    print('json:', req.json())

設(shè)置代理服務器IP(proxy)

使用requests添加代理也是非常簡單,只要在請求方法中(例如requests.get()或者requests.post())傳遞proxies參數(shù)就可以了,示例代碼如下:

GET請求代碼示例

    # 引入requests庫
    import random
    import requests
    
    # 聲明定義代理服務器列表
    proxy_list = [
        {"http": "58.21.202.124:8080"},
        {"http": "58.21.202.39:8080"},
        {"http": "39.107.232.194:8080"}
    ]
    # 隨機選擇一個代理
    proxy = random.choice(proxy_list)
    # 聲明定義請求頭
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 請求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 進行GET請求,打印響應結(jié)果
    try:
        req = requests.get(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

POST請求代碼示例

    # 引入requests庫
    import random
    import requests
    
    # 聲明定義代理服務器列表
    proxy_list = [
        {"http": "58.21.202.124:8080"},
        {"http": "58.21.202.39:8080"},
        {"http": "39.107.232.194:8080"}
    ]
    # 隨機選擇一個代理
    proxy = random.choice(proxy_list)
    # 聲明定義請求頭
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    }
    # 請求地址
    url = 'http://www.baidu.com/s?ie=UTF-8&wd=ip'
    # 進行POST請求,打印響應結(jié)果
    try:
        req = requests.post(url=url, headers=headers, proxies=proxy)
        print(req.text)
    except requests.exceptions.ConnectionError as e:
        print(e)

Cookies(Session)

如果在一個相應中包含了cookie,那么可以利用cookies屬性拿到這個返返回的cookie值,例如:

    # 引入requests庫
    import requests
    
    # GET訪問
    # 向指定的url發(fā)送請求,并返回
    url = 'https://www.baidu.com/'
    # 發(fā)送get請求
    req = requests.get(url=url)
    # 響應內(nèi)容
    print('Cookies信息:', req.cookies)
    print(req.cookies.get_dict())

requests.Session()

上面那個不是重點,重點的是requests.Session() ;之前使用urllib庫的時候是可以使用opener發(fā)送多個請求,多個請求之間是可以共享cookie的。那么如果使用requests,也要達到共享cookie的目的,那么可以使用requests庫給我們提供的session對象。注意,這里的session不是web開發(fā)中的那個session,這個地方只是一個會話的對象而已。還是以人人網(wǎng)登陸為例,使用requests來實現(xiàn),示例代碼如下:

    # 引入requests庫
    import requests
    
    # 聲明定義header
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # 創(chuàng)建session對象
    session = requests.Session()
    # 人人網(wǎng)登陸地址
    post_uel = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2019621044248'
    # 參數(shù)
    form_data = {
        'email': '188****7357',  # 這是手機號,我隱藏掉中間四位
        'icode': '',
        'origURL': 'http://www.renren.com/home',
        'domain': 'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '01cb55635986f56265d3b55aaddaa79337d094cb56d6cf7724343a93ad586fe7',
        'rkey': 'd5ff51375d8eb17a011cad5622d835fd',
        'f': 'http%3A%2F%2Fwww.renren.com%2F971686685%2Fprofile'
    }
    ret1 = session.post(url=post_uel, headers=headers, data=form_data)
    print('登陸結(jié)果:', ret1.json())
    print('*' * 50)
    
    # 人人網(wǎng)個人中心地址
    get_url = 'http://www.renren.com/971686685/profile'
    ret2 = session.get(url=get_url)
    print(ret2.content.decode())

處理不信任的SSL證書

對于那些已經(jīng)被信任的SSL證書的網(wǎng)站,例如//www.baidu.com/,那么使用requests庫直接就可以正常的返回響應。請求可以為HTTPS請求驗證SSL證書,就像web瀏覽器一樣,SSL驗證默認是開啟的,如果證書驗證失敗,請求會拋出SSLError遇到請求的SSL驗證,可以直接跳過不驗證,將verify=False設(shè)置一下即可示例代碼:

    # 引入requests庫
    import requests
    
    # 向指定的url發(fā)送請求,并返回
    url = 'https://www.12306.cn/'
    # 發(fā)送get請求
    req = requests.get(url=url, verify=False)
    
    print(req.content)

到此這篇關(guān)于Python之requests高級用法詳解的文章就介紹到這了,更多相關(guān)requests高級用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 如何利用Python爬蟲精準獲取淘寶商品詳情

    如何利用Python爬蟲精準獲取淘寶商品詳情

    淘寶作為中國最大的電商平臺之一,擁有海量的商品數(shù)據(jù),對于研究市場趨勢、分析消費者行為等具有重要意義,本文將詳細介紹如何使用Python編寫爬蟲程序,精準獲取淘寶商品詳情信息,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Python使用signal定時結(jié)束AsyncIOScheduler任務的問題

    Python使用signal定時結(jié)束AsyncIOScheduler任務的問題

    這篇文章主要介紹了Python使用signal定時結(jié)束AsyncIOScheduler任務,在使用aiohttp結(jié)合apscheduler的AsyncIOScheduler模擬定點并發(fā)的時候遇到兩個問題,針對每個問題給大家詳細介紹,需要的朋友可以參考下
    2021-07-07
  • python隊列通信:rabbitMQ的使用(實例講解)

    python隊列通信:rabbitMQ的使用(實例講解)

    下面小編就為大家分享一篇python隊列通信:rabbitMQ的使用(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python讀取Excel表格,并同時畫折線圖和柱狀圖的方法

    Python讀取Excel表格,并同時畫折線圖和柱狀圖的方法

    今天小編就為大家分享一篇Python讀取Excel表格,并同時畫折線圖和柱狀圖的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python爬蟲爬取網(wǎng)站圖片

    Python爬蟲爬取網(wǎng)站圖片

    這篇文章主要介紹了Python爬蟲爬取網(wǎng)站圖片,此次python3主要用requests,解析圖片網(wǎng)址主要用beautiful soup,可以基本完成爬取圖片功能,需要的朋友可以參考一下
    2022-01-01
  • Python3隨機漫步生成數(shù)據(jù)并繪制

    Python3隨機漫步生成數(shù)據(jù)并繪制

    這篇文章主要為大家詳細介紹了Python3隨機漫步生成數(shù)據(jù)并繪制的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 解決Python下imread,imwrite不支持中文的問題

    解決Python下imread,imwrite不支持中文的問題

    今天小編就為大家分享一篇解決Python下imread,imwrite不支持中文的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 一文搞懂python 中的迭代器和生成器

    一文搞懂python 中的迭代器和生成器

    這篇文章主要介紹了python 中的迭代器和生成器簡單介紹,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 解決Python pip 自動更新升級失敗的問題

    解決Python pip 自動更新升級失敗的問題

    今天小編就為大家分享一篇解決Python pip 自動更新升級失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論