iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
AI & Data

網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術系列 第 15

【Day 15】- 匯率什麼的。爬! (實戰匯率爬蟲 on chrome)

前情提要

前一篇帶各位實作了爬取 Ubuntu ISO 映像檔的爬蟲,並存在 JSON 檔。

開始之前

本篇將帶各位爬取 google 上的匯率,各位應該都有試過直接在 google chrome 搜尋美金,chrome 就會回應一個目前的匯率給你。

預期效果

輸入一個幣值,如果能在 chrome 上出現匯率,則讓爬蟲將其爬取下來,回應在終端機上。

實作

以美金為例。https://www.google.com/search?q=美金

我們先來用開發工具觀察一下需求的元素,有哪些標籤方便我們爬取。

可以觀察到,我們需求的 span 元素(匯率數值)有著 class DFlfde SwHCTb ,我們能簡單寫個 requests.get 並搭配 BeautifulSoup 確認是否能夠正確定位到該元素。

import requests
from bs4 import BeautifulSoup

url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
resp = requests.get(url)

soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')

print(ele)

找不到該元素(None),我們能直接檢視 soup 會發現到與我們在網頁上看的不一樣。直覺地,我們能將在 chrome 上的 user-agent 放入爬蟲的 requests header,再次看是否能夠找到該元素。

import requests
from bs4 import BeautifulSoup

url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
    'user-agent': user_agent
})

soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')

print(ele)

'''
<span class="DFlfde SwHCTb" data-precision="2" data-value="27.795">27.80</span>
'''

成功爬取,接下來能直接取出該元素的 text。

import requests
from bs4 import BeautifulSoup

url = 'https://www.google.com/search?q=%E7%BE%8E%E9%87%91'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
    'user-agent': user_agent
})

soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')

print(f'目前 1 美金為 {ele.text} 新台幣')
'''
目前 1 美金為 27.80 新台幣
'''

接下來,我們能將美金換為變數,讓使用者能夠自己輸入。

import requests
from bs4 import BeautifulSoup
cointype = input('請輸入您想要爬取的幣種匯率 : ')
url = f'https://www.google.com/search?q={cointype}'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
resp = requests.get(url, headers={
    'user-agent': user_agent
})

soup = BeautifulSoup(resp.text, 'html5lib')
ele = soup.find('span', class_='DFlfde SwHCTb')

if ele:
    print(f'目前 1 {cointype}為 {ele.text} 新台幣')
else:
    print('目前沒有匯率')

結語

今天實作了爬取幣種匯率的爬蟲,能夠讓使用者自行輸入想要查詢的幣種。

明日內容

明天會帶各位在 python 中操作 excel。


上一篇
【Day 14】- 實戰爬取 Ubuntu ISO 映像檔下載網址
下一篇
【Day 16】- 做 Excel 輸入數據到心累?消警告的服學輸入很繁瑣? 使用 openpyxl 來操作 Excel
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30

尚未有邦友留言

立即登入留言