我想從this site中抓取以下三個數據點:已驗證的%,FAR的數值以及POD的數值。我試圖在BeautifulSoup中做到這一點,但我沒有在網站遍歷中練習,所以我無法描述這些元素的位置。使用美麗的湯在雜亂的網站上使用Python網頁刮取
要做到這一點最簡單的方法是什麼?
我想從this site中抓取以下三個數據點:已驗證的%,FAR的數值以及POD的數值。我試圖在BeautifulSoup中做到這一點,但我沒有在網站遍歷中練習,所以我無法描述這些元素的位置。使用美麗的湯在雜亂的網站上使用Python網頁刮取
要做到這一點最簡單的方法是什麼?
我最終解決它myself--我利用類似於isedev的策略,但我希望我能找到獲得「驗證」的數據的一種更好的方式:
import urllib2
from bs4 import BeautifulSoup
wfo = list()
def main():
wfo = [i.strip() for i in open('C:\Python27\wfo.txt') if i[:-1]]
soup = BeautifulSoup(urllib2.urlopen('http://mesonet.agron.iastate.edu/cow/?syear=2009&smonth=9&sday=12&shour=12&eyear=2012&emonth=9&eday=12&ehour=12&wfo=ABQ&wtype%5B%5D=TO&hail=1.00&lsrbuffer=15<ype%5B%5D=T&wind=58').read())
elements = soup.find_all("span")
find_verify = soup.find_all('th')
far= float(elements[1].text)
pod= float(elements[2].text)
verified = (find_verify[13].text[:-1])
如果您還沒有,請爲Firefox安裝Firebug,並使用它來檢查頁面的html源代碼。
使用urllib
和BeautifulSoup的組合來處理HTML檢索和解析。下面是一個簡單的例子:
import urllib
from BeautifulSoup import BeautifulSoup
url = 'http://mesonet.agron.iastate.edu/cow/?syear=2009&smonth=9&sday=12&shour=12&eyear=2012&emonth=9&eday=12&ehour=12&wfo=ABQ&wtype[]=TO&hail=1.00&lsrbuffer=15<ype[]=T&wind=58'
fp = urllib.urlopen(url).read()
soup = BeautifulSoup(fp)
print soup
從這裏,我提供的鏈接應該給你一個良好的開端到如何檢索你感興趣的元素
像That1Guy的說,你需要分析源頁面結構。在這種情況下,你很幸運......你正在使用<span>
以紅色突出顯示的數字。
這將做到這一點:
>>> import urllib2
>>> import lxml.html
>>> url = ... # put your URL here
>>> html = urllib2.urlopen(url)
>>> soup = lxml.html.soupparser.fromstring(html)
>>> elements = soup.xpath('//th/span')
>>> print float(elements[0].text) # FAR
0.67
>>> print float(elements[1].text) # POD
0.58
注lxml.html.soupparser
相當於BeautifulSoup
解析器(我沒有在時刻手)漂亮多了。