2015-04-22 47 views
0

我想到達某個元素,解析網站的源代碼。 這是我試圖解析(這裏,直到星期五)部分的摘要,但它是一週Python,美麗的湯:如何獲得所需的元素

<div id="intForecast"> 
    <h2>Forecast for Rome</h2> 
    <table cellspacing="0" cellpadding="0" id="nonCA"> 
     <tr> 
      <td onclick="showDetails('1');return false" id="day1" class="on"> 
       <span>Thursday</span> 
       <div class="intIcon"><img src="http://icons.wunderground.com/graphics/conds/2005/sunny.gif" alt="sunny" /></div> 
       <div>Clear</div> 
       <div><span class="hi">H <span>22</span>&deg;</span>/<span class="lo">L <span>11</span>&deg;</span></div> 
      </td> 
      <td onclick="showDetails('2');return false" id="day2" class="off"> 
       <span>Friday</span> 
       <div class="intIcon"><img src="http://icons.wunderground.com/graphics/conds/2005/partlycloudy.gif" alt="partlycloudy" /></div> 
       <div>Partly Cloudy</div> 
       <div><span class="hi">H <span>21</span>&deg;</span>/<span class="lo">L <span>15</span>&deg;</span></div> 
      </td> 
     </tr> 
    </table> 
</div> 

所有的日子一樣....等等所有的日子

其實我得到了我的結果,但在一個醜陋的方式,我認爲:

forecastFriday= soup.find('div',text='Friday').findNext('div').findNext('div').string 

現在,你可以看到我深下去重複.findNext('div')的元素,並最終在.string

到貨

我想獲得星期五的信息「晴天多雲」

那麼更多pythonic的方式來做到這一點? 謝謝!

回答

0

只需找到所有的<td> S和迭代他們:

soup = BeautifulSoup(your_html) 
div = soup('div',{'id':'intForecast'})[0] 
tds = div.find('table').findAll('td') 

for td in tds: 
    day = td('span')[0].text 
    forecast = td('div')[1].text 
    print day, forecast 
+0

謝謝!你能解釋一下我的第二條線是如何工作的嗎? –

+0

第二行'div = soup('div',{'id':'intForecast'})[0]'通過查找具有第二個參數中描述的識別特徵的'div'來工作。被傳遞的字典描述了一個ID爲id的元素,其值爲intForecast。這將返回與該描述相匹配的元素列表。由於只有一個返回,我們得到列表中的第一個項目(0索引)。這是否足夠的解釋? – That1Guy