2014-09-28 116 views
0

我是python和SO的新手。這是我的問題。如何使用BeautifulSoup提取html標籤之外的數據

我想從以下網頁NDBC - Station 46011.我一直在看關於如何使用BeautifulSoup從網頁收集數據的教程提取數據,我有以下代碼至今:

import requests 
from bs4 import BeautifulSoup 
url = 'http://www.ndbc.noaa.gov/data/latest_obs/46011.rss' 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
data_types = soup.find_all('strong') 
for item in data_types: 
    print(item.text) 

這給了我不同的數據類型(風向,速度,陣風等)。但是,我無法從此網頁提取數字數據。當您查看網頁來源時,您可以看到數字數據位於'strong'標籤之後和'br'標籤之前。由於它沒有顯式地位於兩個標籤之間,因此無法提取此數據。

感謝您提前提供所有幫助!

+1

你有看着如http://stackoverflow.com/q/8220732/3001761? – jonrsharpe 2014-09-28 08:02:24

回答

0
import requests 
from bs4 import BeautifulSoup 
url = 'http://www.ndbc.noaa.gov/data/latest_obs/46011.rss' 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
data_types = soup.find_all("description")[1].text.split('\n') 
for item in data_types: 
    print(item) 

Out[1]: 
September 28, 2014 12:50 am PDT 
Location: 35N 120.992W 
Wind Direction: NW (320°) 
Wind Speed: 7.8 knots 
Wind Gust: 9.7 knots 
Significant Wave Height: 8.5 ft 
Dominant Wave Period: 9 sec 
Average Period: 6.7 sec 
Mean Wave Direction: NW (304°) 
Atmospheric Pressure: 29.90 in (1012.5 mb) 
Pressure Tendency: +0.00 in (+0.0 mb) 
Air Temperature: 62.1°F (16.7°C) 
Water Temperature: 59.9°F (15.5°C) 

希望幫助:-)

讓我知道你是否需要採取進一步措施爲好。

0

如果你只是想文本(這不是一個標籤內)旁邊的每個<strong>標籤(和你確定一些文本<strong>後總是有),你可以操縱BeautifulSoup的contents名單。下面的代碼給出了元組列表中數據項的標籤和內容。

import requests 
from bs4 import BeautifulSoup 
url = 'http://www.ndbc.noaa.gov/data/latest_obs/46011.rss' 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
contents = soup.find_all('description')[1].contents 
data=[] 
for i,content in enumerate(contents): 
    if content.name=="strong": 
     data.append((content.string,contents[i+1].string)) 
print data  

輸出:

[(u'Location:', u' 35N 120.992W'), (u'Wind Direction:', u' NW (320\xb0)'), (u'Wind Speed:', u' 7.8 knots'), (u'Wind Gust:', u' 9.7 knots'), (u'Significant Wave Height:', u' 8.5 ft'), (u'Dominant Wave Period:', u' 9 sec'), (u'Average Period:', u' 6.7 sec'), (u'Mean Wave Direction:', u' NW (304\xb0) '), (u'Atmospheric Pressure:', u' 29.90 in (1012.5 mb)'), (u'Pressure Tendency:', u' +0.00 in (+0.0 mb)'), (u'Air Temperature:', u' 62.1\xb0F (16.7\xb0C)'), (u'Water Temperature:', u' 59.9\xb0F (15.5\xb0C)')] 
相關問題