2015-05-27 41 views
1

我已經將HTML縮小到了使用我的代碼的一個點,但是我無法使用列表理解來獲取href地址。初學者問題從Python BeautifulSoup抓取涉及列表理解的HREF

這裏是我的代碼(BASE_URL和STEM_URL是固定的地址):

soup = BeautifulSoup(requests.get(BASE_URL).text) 
divyclass = soup.find("div", {"class":"node-inner"}).tbody 

在那裏我遇到問題,我得到這個錯誤(TypeError: 'NoneType' object has no attribute '__getitem__')是當我加入這一行的列表理解:

links = [STEM_URL + row.a["href"] for row in divyclass.findAll("td")] 

當我運行

for row in divyclass.findAll("td"): 
    print row 

,我得到這個輸出順便說一句,只是讓你可以發ee我從哪裏拉hrefs:

<td align="center" class="tableheader" colspan="4" valign="middle">NBA Drafts</td> 
<td align="center" class="text" valign="middle"> </td> 
<td align="center" class="text" valign="middle"> </td> 
<td align="center" class="text" valign="middle"> </td> 
<td align="center" class="text" valign="middle"><a href="/nba_final_draft/2014">2014</a></td> 
<td align="center" class="text" valign="middle"> <a href="/nba_final_draft/2013">2013</a></td> 
<td align="center" class="text" valign="middle"> <a href="/nba_final_draft/2012">2012</a></td> 
<td align="center" class="text" valign="middle"><a href="/nba_final_draft/2011">2011</a></td> 
<td align="center" class="text" valign="middle"><a href="/nba_final_draft/2010">2010</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_final_draft/2009">2009</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2008.html">2008</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2007.html">2007</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2006.html">2006</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2005.html">2005</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2004.html">2004</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2003.html">2003</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2002.html">2002</a></td> 
<td align="center" class="text" valign="middle" width="25%"><a href="/nba_draft_history/2001.html">2001</a></td> 

gah!我只想拉扯hrefs!在此先感謝傢伙!

回答

2

對於其中沒有a元素的行,row.a將爲None。如果更改

links = [STEM_URL + row.a["href"] for row in divyclass.findAll("td")] 

links = [STEM_URL + row.a["href"] for row in divyclass.findAll("td") if row.a] 

,將過濾掉row元素沒有a元素。

+0

謝謝@Misandrist!是否有任何理由爲什麼'row.a [「href」] = True'不會有效?有沒有其他的辦法可以奏效? – SpicyClubSauce

+0

@SpicyClubSauce:如果'row.a'爲'None',row.a [「href」] = True'基本上會引發相同的'TypeError'。你不能索引一個'None'對象來設置值,而不是獲取值;它不是一個集合。 – abarnert

+0

@SpicyClubSauce:另外,你爲什麼要這麼做?然後,不是隻得到實際的'href'字符串,而是混合使用'href'字符串和無用的'True'布爾值。 – abarnert