接著我們將開始實作爬蟲的程式,首先先來暸解如何使用爬蟲的工具模組,在實作的過程中我們需要先具備幾種基本知識(Http、Html),要先理解Http的請求方式,之後會利用網頁原始碼進行我們所需要的資料進行擷取,所以對於Html也需要基本的程度.
使用 Python 來下載網頁上的資料,最基本的作法就是以requests
模組建立適當的 HTTP 請求,透過 HTTP 請求從網頁伺服器下載指定的資料,基本上分為兩種模式Post
、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的用法基本上與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也能透過以下方式取得:
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/