iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
1
AI & Data

30天 python 學習心得分享系列 第 15

Day15- 爬蟲使用模組介紹-requests

  • 分享至 

  • xImage
  •  

接著我們將開始實作爬蟲的程式,首先先來暸解如何使用爬蟲的工具模組,在實作的過程中我們需要先具備幾種基本知識(Http、Html),要先理解Http的請求方式,之後會利用網頁原始碼進行我們所需要的資料進行擷取,所以對於Html也需要基本的程度.


Requests模組

使用 Python 來下載網頁上的資料,最基本的作法就是以requests模組建立適當的 HTTP 請求,透過 HTTP 請求從網頁伺服器下載指定的資料,基本上分為兩種模式PostGet以下會對於兩種方式進行介紹.

Get

一般簡單的網站能透過Get的方式下載網頁,使用方式如下:

import requests

uri = 'https://ithelp.ithome.com.tw/users/20110503/articles'
a = requests.get(uri)

上述我們將使用Get下載回來的資料存入到a變數,底下對於a變數我們能進行以下操作:

  • url : 取得請求網址
  • status_code : 伺服器回應的狀態碼
  • text : 取得網頁 HTML 原始碼

可以利用以上方式進行簡單的判斷伺服器連線是否正常,如下範例:

import requests
uri = 'https://ithelp.ithome.com.tw/users/20110503/articles'
a = requests.get(uri)

if a.status_code == requests.codes.ok:
    print(a.status_code)    
    
#輸出:200

如遇上需要帶上querystring參數可以這樣使用:

import requests
uri = 'https://ithelp.ithome.com.tw/questions'
#取得熱門問題
myParams = {'tab':'hot'}
a = requests.get(uri, params = myParams)

if a.status_code == requests.codes.ok:
    print(a.url)    
#輸出:https://ithelp.ithome.com.tw/questions?tab=hot

除了增加querystring外也能夠自訂傳送表頭、傳送帳密、設定連線等待時間:

import requests
uri = 'https://ithelp.ithome.com.tw/questions'
#自訂表頭
my_headers = {'user-agent': 'my-app/0.0.1'}

#將自訂表頭加入 GET 請求中
r = requests.get(uri, headers = my_headers)

#需要帳號登入的網頁
r = requests.get(uri, auth=('帳號', '密碼'))

#等待 3 秒無回應則放棄
requests.get('http://github.com/', timeout = 3)

關於表頭資訊可以透過以下方式打印出來,有些網站會針對傳送表頭進行爬蟲阻擋(範例),這時候就需要自訂表頭了

#未自訂表頭
print(a.request.headers) 
#輸出:{'User-Agent': 'python-requests/2.19.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

Post

Post的用法基本上與Get差不多唯一差別的是傳送資料的方式,寫法如下範例:

import requests
uri = 'https://ithelp.ithome.com.tw/questions'
#資料
my_data = {'key1': 'value1', 'key2': 'value2'}
#將資料加入 POST 請求中
r = requests.post(uri, data = my_data)

以上範例為單一鍵值,但有時會遇到需傳送重複的key表單,這時資料寫法就需要改以下寫法:

#具有重複鍵值的資料
my_data = (('key1', 'value1'), ('key1', 'value2'))

網站Cookie

若我們取得得網站包含Cookie也能透過以下方式取得:

import requests
uri = 'https://ithelp.ithome.com.tw/questions'
a = requests.get(uri)
# 取出 cookie
print(a.cookies['cookie名稱'])

也可以設定要帶給網頁Cookie,如下範例:

# 設定 cookie
import requests
uri = 'https://ithelp.ithome.com.tw/questions'
my_cookies = dict(my_cookie_name='G. T. Wang')
# 將 cookie 加入 GET 請求
r = requests.get(uri, cookies = my_cookies)

以上是我們之後再爬蟲會使用到有關requests模組的用法.
文章內容如果有錯誤歡迎留言告知,可以幫忙糾正錯誤的觀念,感謝!

參考文章:https://blog.gtwang.org/programming/python-requests-module-tutorial/


上一篇
Day14-Python發展面向
下一篇
Day16-爬蟲使用模組介紹-Beautiful Soup 1
系列文
30天 python 學習心得分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言