iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
自我挑戰組

從零開始學Python系列 第 23

[Day23] Python Requests 模組-1

  • 分享至 

  • xImage
  •  

Requests 模組可以做到的事情很多,像是可以在部落格中發布文章或者到某個網站中爬取資訊並可以將其匯出excel表。

  1. 下載模組
pip install requests
  1. import模組
import requests as req
  1. 發送請求到需要爬蟲的網頁,可以先將網址複製下來,這邊以dcard為例
    Dcard網站:Dcard
  • 先用一個變數存放
url = "https://www.dcard.tw/f"
  • 使用get功能來發送http的請求
re = req.get(url)
print(re)

由結果可以得知,這是一個response物件
https://ithelp.ithome.com.tw/upload/images/20240913/20168811FUrO7qlG0M.png

  • 如果想要知道回傳的東西是什麼,可以用text,輸出會是一大串的html,如果要進一步解析,可以使用BeautifulSoup模組。
print(re.text)
  1. 如果要從網頁中下載圖片,也可用requests的模組來運行
  • 這邊以搜狗圖片中的水獺圖片為例。
    圖片
  • 因為圖片是二進制的檔案,如果用text的形式去讀的話,會是一串亂碼,所以要使用content來執行。
img_url = "http://i0.hdslb.com/bfs/article/a2eb4c4efb554e92bd5f3409de35dab5a0bf639f.jpg"

re = req.get(img_url)
print(re.content)
  • 存圖片
with open('animal.jpg', mode = "wb") as file:
    file.write(re.content)

https://ithelp.ithome.com.tw/upload/images/20240913/20168811yAujPpf10u.png

  1. 從網頁下載pdf檔案
    以CDC的登革熱檔案為例:無蚊最安心!做好環境管理%20清除孳生源
import requests as req

pdf_url = "https://www.cdc.gov.tw/Uploads/files/無蚊最安心!做好環境管理%20清除孳生源.pdf"

re = req.get(pdf_url)

with open('dengue.pdf', mode = "wb") as file:
    file.write(re.content)
  1. 測試發送出的requests
    可以使用httpbin網站來測試:httpbin
  • 以post功能為例, 先看一下回傳的text
import requests as req

url = 'https://httpbin.org/post'

re = req.post(url) #這邊要改成post
print(re.text)

https://ithelp.ithome.com.tw/upload/images/20240913/20168811wdFBpCIpi9.png

  • 因為post的功能主要是上傳資料到伺服器,如果要上傳data,可以在data中放入資料
    可以看到資料被用成一個表單的模式上傳到伺服器。
import requests as req

url = 'https://httpbin.org/post'

data = {
    'title' : 'python',
    'content' : 'Hello World!'
}

re = req.post(url, data=data)
print(re.text)

https://ithelp.ithome.com.tw/upload/images/20240913/20168811SEWki44feB.png

  • 如果要上傳檔案,可以合併前面使用過的with open()
import requests as req

url = 'https://httpbin.org/post'

data = {
    'title' : 'python',
    'content' : 'Hello World!'
}

with open('dengue.pdf', mode='rb') as file:
    pdf = {'upload' : file.read()}
    re = req.post(url, data=pdf, json=data)
    print(re.text)
  1. 更改User-Agent
  • "User-Agent": "python-requests/2.32.3",可以看到這個User-Agent會告訴網頁,這個請求是從python發送過來的,通常會被擋掉,所以要把User-Agent的值改掉,改成像瀏覽器發送的請求。
    找一個網站,開啟原始碼,點network,重新整理,從標題的地方找User-Agent。
    https://ithelp.ithome.com.tw/upload/images/20240913/20168811rQeGSkC2Rj.png

  • 新增一個header的字典

import requests as req

url = 'https://httpbin.org/post'

data = {
    'title' : 'python',
    'content' : 'Hello World!'
}

header = {
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.6 Safari/605.1.15'
}


re = req.post(url, headers=header)
print(re.text)

https://ithelp.ithome.com.tw/upload/images/20240913/20168811jWRp0PW315.png

資料來源:GrandmaCan -我阿嬤都會教學影片


上一篇
[Day22] Python 爬蟲-3 (下載一系列搜尋到的圖片)
下一篇
[Day24] Python Requests 模組-2
系列文
從零開始學Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言