2017-04-19 16 views
0

我正在使用beautifulsoup處理數據。get_text()返回空值。我想將它轉換爲無

現在我遇到了問題。

我的代碼是下面

elif '임차인' and '점유부분' in table.get_text(): #임차인 현황 
    print(table) 
    for renters in table.findAll('tr')[1::]: 
     # print(renters) 
     for renter_values in renters.findAll('td', ({'class':'center'})): 
      print("It is \n" + renter_values.get_text()) 
      registration_of_businessman = renters.findAll('td', ({'class': 'left'}))[0] 
      etc = renters.findAll('td', ({'class': 'left'}))[1] 
      rental_fee = renters.find('td', ({'class': 'money'})) 

enter image description here

以上是對局部輸出。您可以看到空值低於第四個'這是'

您可以在此處獲取表格源。 http://blog.naver.com/khm2963/220987221959

我該如何解決這個問題?

+2

如果你想轉換成'None'一個空字符串,你可以使用'(renter_values.get_text()或無)'。 – khelwood

+0

你的表達方式中的''임차인'和'部分是多餘的。它可以在不改變表達式意義的情況下被移除。如果你想測試兩個字符串是否存在,你需要使用不同的表達式。 –

+0

感謝您的回答。我在代碼中添加'或None',如renter_values.get_text()。strip()或None。 但它返回空字符串。爲什麼?我該如何解決它? –

回答

2

我不確定你真正想要什麼。你希望無或字符串轉換爲字符串'無'?這裏有一個例子:

elif '임차인' and '점유부분' in table.get_text(): #임차인 현황 
    print(table) 
    for renters in table.findAll('tr')[1::]: 
     # print(renters) 
     for renter_values in renters.findAll('td', ({'class':'center'})): 
      return_value = renter_values.get_text() 
      if return_value: 
       print("It is \n" + return_value) 
      registration_of_businessman = renters.findAll('td', ({'class': 'left'}))[0] 
      etc = renters.findAll('td', ({'class': 'left'}))[1] 
      rental_fee = renters.find('td', ({'class': 'money'})) 

在考察beautifulSoup get_text方法我發現這個方法將返回一個'',如果有哪裏用這種方法沒有catched_values。它在字符串分隔符上使用.join()函數。這樣該方法返回一個空字符串是正確的。如果您確實需要None作業,請在return_value作業下添加一行,如:return_value = return_value if len(return_value) > 0 else None

在下面的代碼:

def get_text(self, separator=u"", strip=False, types=(NavigableString, CData)): 
    """ 
    Get all child strings, concatenated using the given separator. 
    """ 
    return separator.join([s for s in self._all_strings(
       strip, types=types)]) 
+0

我想將空字符串轉換爲無。感謝您的回答。上面不起作用 –

+0

沒問題:)你的意思是我的代碼不工作(因爲它在上面)或者其他答案不起作用? –

+0

在python中''None''會給你一個條件中的'False''聲明。空字符串如''''''也會給你一個'False''聲明。如果你真的需要''None'',你可以在return_value賦值下面添加一行:''return_value = return_value if len(return_value)> 0 else None'' –

0

空值出現,因爲該空間在葉標籤找到。

你必須要對「白色空間隻字符串」過濾器,如下

for renter_values in renters.findAll('td', ({'class':'center'})): 
    if renter_values.get_text().strip(): 
     print("It is \n" + renter_values.get_text()) 
+0

謝謝你的回答。但它沒有奏效 –

相關問題