2014-09-28 2 views
0

저는 Python에 익숙하지 않습니다. 여기에 내 질문이있다. BeautifulSoup를 사용하여 HTML 태그 외부에서 데이터를 추출하는 방법

나는 다음과 같은 웹 페이지 나 웹 페이지에서 데이터를 수집하기 위해 BeautifulSoup로를 사용하는 방법에 대한 자습서를 지켜 봤는데 NDBC - Station 46011.에서 데이터를 추출하기 위해 노력하고있어 및 내가 지금까지 코드를 다음 있습니다 :

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

답변

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) 

희망. 그냥 (즉, 태그 내에 아니다) 다음 각 <strong> 태그에 텍스트를 원하는 (및 일부 텍스트 <strong> 후 항상이 있다고 확신) 경우

0

, 당신은 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)')] 
관련 문제