如何使用BeautifulSoup从html标签之外提取数据

时间:2014-09-28 07:49:08

标签: python html beautifulsoup

我是python和SO的新手。这是我的问题。

我正在尝试从以下网页中提取数据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) 

这给了我不同的数据类型(风向,速度,阵风等)。但是,我无法从此网页中提取数值数据。当您查看网页来源时,您可以看到数字数据位于“强”标记之后和“br”标记之前。由于它没有显式位于两个标签之间,因此无法提取此数据。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分: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)

希望有所帮助: - )

如果您还需要采取进一步措施,请与我们联系。

答案 1 :(得分:0)

如果您只想在每个<strong>标记旁边显示文字(不在标记内)(并且您确定{{1}之后总是有一些文字}),你可以操纵BeautifulSoup的<strong>列表。下面的代码为您提供了元组列表中数据项的标签和内容。

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