2016-03-02 75 views
1

我試圖從使用BeautifulSoup的HTML源提取數據。這是源如何處理其colspan ==''的td標籤?

<td class="advisor" colspan=""> 

這裏是我的代碼:

soup = BeautifulSoup(html, 'html.parser') 
tds = soup.find_all('td') 

for td in tds: 
    if td["colspan"] == '': 
     col = 0 
    else: 
     col = int(td["colspan"]) 

不過,我得到這個錯誤:

ValueError: invalid literal for int() with base 10: '' 

我知道這個錯誤意味着'不能轉化爲整數,但爲什麼我的'如果'不工作?我認爲這種情況應該去

col = 0 

而不是

col = int(td["colspan"]) 
+0

你可以做'如果td [「colspan」]。strip()=='':'看看是否有幫助嗎? – shahkalpesh

+0

可以包括'A,B,C,D,E,F'嗎? – Ian

+0

@shahkalpesh它不起作用。你能告訴我什麼是strip()嗎?我以前在文檔中沒有看到它。謝謝:) –

回答

2

我會建議你使用異常處理如下:

from bs4 import BeautifulSoup 

html = """ 
    <td class="advisor" colspan="2"></td> 
    <td class="advisor" colspan=""></td> 
    <td class="advisor" colspan="x"></td> 
    """ 

soup = BeautifulSoup(html, 'html.parser') 
tds = soup.find_all('td') 

for td in tds: 
    try: 
     col = int(td["colspan"]) 
    except (ValueError, KeyError) as e: 
     col = 0 

    print(col) 

這將顯示如下:

2 
0 
0 

使用Python 3.4.3

+0

我試過了你的代碼,但是它仍然給我ValueError ... –

+0

我試過上面的腳本,網址,它似乎工作正常。它產生很多0,有幾個2。你使用的是什麼版本的Python和BeautifulSoup? –

+0

我也收到了所有的colspan值,結果與你的一樣。它真的很奇怪,如果沒有工作... 我的python版本是3.5.1和BS4 –

1

爲了避免錯誤,由於錯誤輸入類型,你可以檢查的說法是真的完整的第一,然後再繼續:

def check_int(s): 
    if s = '' or s is None 
     return False 
    st = str(s) 
    if st[0] in ('-', '+'): 
     return st[1:].isdigit() 
    return st.isdigit() 

for td in tds: 
    if check_int(td["colspan"]): 
     col = int(td["colspan"]) 
    else: 
     col = 0 

或者,使用三元操作:

for td in tds: 
    col = int(td["colspan"]) if check_int(td["colspan"]) else 0 

編輯:一些good materials做int檢查沒有嘗試除外。

+0

謝謝你的幫助!我終於發現這是我的錯!我知道爲什麼它不工作!謝謝:) –

+0

@MarsLee ow,這對你很有好處..;) – Ian

0

測試你可以假設值var col的全稱是"",然後檢查它是否屬實。

soup = BeautifulSoup(html, 'html.parser') 
tds = soup.find_all('td') 

for td in tds: 
    col = 0 
    if td["colspan"].isdigit(): 
     col = int(td["colspan"]) 
+0

你的策略很酷,但我仍然得到ValueError。我不知道爲什麼... –

+0

試着把一些打印值調試一下。 –

+0

我打印所有的colspan值,我非常確定它是'',所以'if'不起作用真的很奇怪。 –