[Prac] 簡單的爬蟲實踐
阿新 • • 發佈:2018-12-15
(源自《實用資料分析》(原書第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)
加了一個迴圈結構,每一分鐘獲取一次。