close

話不多說,今天要到SPACE WEATHER PREDICTION CENTER爬蟲x-ray flux,至於這件事有甚麼意義,可以隨便請教你認識有在教微氣候學的老師,他們都可以回答你的問題。

(連結:https://www.swpc.noaa.gov/products/goes-x-ray-flux?fbclid=IwAR0fhIxZFgOXFfTvuC3jLn9WspYURfTDuFiIizJukKbceNia9d94NGA9uJE)

 

 

 
一樣,先檢查原始碼,發現gif的圖檔位在一個<div class="product-grid-cell">下面的<img>標籤,該圖的連結在標籤內的src屬性裡面,圖檔的名稱則是alt屬性。
 
所以我們一樣利用selenium開啟模擬瀏覽器,用BeautifulSoup解析原始碼,進入到目標的div標籤之後,使用urllib.request.urlretrieve把圖檔給載下來。
 
在來就是就是圖的下方有一個測量flux的表格,我們希望把表格的內容寫進csv檔裡面。檢查原始碼發現,表格被放在<table id = 'event_table'>裡面,一樣進入到該標籤後,把每一個欄位的內容取出做成一個list之後,用writerow寫入csv檔之中。
 
執行完之後的結果:
 
 

 

下載下來的圖片會跟.py檔在同一個資料夾裡面。

 

 
csv檔裡面的內容就會像這樣。
 
程式碼:
 
# coding: utf-8
from bs4 import BeautifulSoup
from selenium import webdriver
import datetime
import urllib.request
import urllib
import csv

#x-ray flux
url = 'https://www.swpc.noaa.gov/products/goes-x-ray-flux?fbclid=IwAR0fhIxZFgOXFfTvuC3jLn9WspYURfTDuFiIizJukKbceNia9d94NGA9uJE'

#開啟模擬瀏覽器
driver = webdriver.Chrome()
driver.get(url)

#用lxml解析原始碼
soup = BeautifulSoup(driver.page_source, features='lxml')
driver.quit()

#進到<div>,因為圖有兩張,所以是find_all
divs = soup.find_all('div',{'class':"product-grid-cell"})

for div in divs:

    #取得圖檔連結
    href = div.a['href']
    #圖檔名稱
    pic_name = div.img['alt']+'.gif'
    #下載圖片
    data = urllib.request.urlretrieve(href,pic_name)

    

table = soup.find('table',{'id':'event_table'})
trs = table.tbody.find_all('tr')

#'data.csv'是要寫入的檔名,'a'代表append,用'r'會寫掉之前的內容
with open('data.csv', 'a',newline='') as f:
    
    writer = csv.writer(f)
    
    for tr in trs:
        divs = tr.find_all('div')
        a = []
        for div in divs:
            #把資料彙集成一個list
            a.append(div.text)

        #寫入資料
        writer.writerow(a)

    #關閉文件
    f.close()
        
 
arrow
arrow
    全站熱搜

    理性與感性 發表在 痞客邦 留言(0) 人氣()