1. 程式人生 > >[Prac] 簡單的爬蟲實踐

[Prac] 簡單的爬蟲實踐

(源自《實用資料分析》(原書第2版),網站更新後原文程式碼不能用了所以自己寫了個小爬蟲)

1.網頁分析

開發人員工具(F12)用自帶的元素定位

檢視到該內容的兩個標籤 <class="asset ask"> 和 <class="value">

2.程式碼部分

2.1 匯入資料庫

from bs4 import BeautifulSoup
import urllib.request
from time import sleep
from datetime import datetime

1.Beautiful Soup 是一個可以從HTML或XML檔案中提取資料的Python庫.

2.urllib.request

urllib 的 request 模組可以非常方便地抓取 URL 內容,也就是傳送一個 GET 請求到指定的頁面,然後返回 HTTP 的響應

2.2 開啟網頁

url = "https://www.gold.org/"
req = urllib.request.urlopen(url)
page = req.read()

執行的時候出現了問題

百度之,發現是網站對於自動化爬蟲的限制。解決方案大體就是加一個訪問的時候 header 偽裝成正常瀏覽器的樣子就可以了。

2.3 偽裝自己

user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
url = "https://www.gold.org/"
req = urllib.request.Request(url,None,headers)
response = urllib.request.urlopen(req)
page = response.read()

2.4 尋找標籤

soup = BeautifulSoup(page,'lxml')
price = soup.find("div",class_=["asset","ask"]).find_next(class_="value")
print(price.text)

2.5 寫入檔案

with open("goldPrice.out","w") as f:
    sNow = datetime.now().strftime("%I:%M:%S%p")
    f.write("{0},{1} \n".format(sNow, getGoldPrice()))

"%I:%M:%S%P",%I 代表小時,%M 代表分鐘,%S 代表秒,%p 代表 A.M. 或 P.M.

2.6 全部程式

from bs4 import BeautifulSoup
import urllib.request
from time import sleep
from datetime import datetime

def getGoldPrice():
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }
    url = "https://www.gold.org/"
    req = urllib.request.Request(url,None,headers)
    response = urllib.request.urlopen(req)
    page = response.read()

    soup = BeautifulSoup(page,'lxml')
    price = soup.find("div",class_=["asset","ask"]).find_next(class_="value")
    return price.text

with open("goldPrice.out","w") as f:
    for x in range(0,60):
        sNow = datetime.now().strftime("%I:%M:%S%p")
        f.write("{0},{1} \n".format(sNow, getGoldPrice()))
        print("{0},{1} \n".format(sNow, getGoldPrice()))
        sleep(59)

加了一個迴圈結構,每一分鐘獲取一次。