2017-05-24 151 views
1

我在從論壇網站(每頁50行)刮取表格時遇到了一些困難。正如我寫的代碼所寫,95%的內容可以工作,但在粗體或斜體線出現時會添加表格中斷,但我無法獲得完整結果從BeautifulSoup對象中刪除標籤

大多數頁面都有類似這樣的標籤:

<table> 
    <td> 
    content_1 
    </td><td> 
    content_2 
    </td><td> 
    content_3 
    </td> 
    ... 
</table> 

雖然當粗體或斜體短語存在時,無論出於何種原因隨機標籤添加和我只用元件的數量,直到標籤結束。

<table> 
    <td> 
    content_1 
    </td><td> 
     <b><i>content_2</b></i> *</table>* 
    </td><td> 
    content_3 
    </td> 
... 
</table> 

我不確定爲什麼這個標籤出現(當我檢查網頁上的元素時,它不會出現)。

有沒有人有任何建議如何處理這個?我有一些想法,但他們都沒有解決。

  • 轉換的beautifulsoup對象的字符串,然後刪除標記,並轉換回beautifulsoup - 還沒有完全還沒有工作,但似乎有點過多,會減慢程序...

  • 只是跳過湯和使用pd.read_html - 還沒有得到它的工作。

或者如果有人對替代方法有任何建議,我們將不勝感激。謝謝!

編輯 - 計算它會幫助,如果我只是添加我的代碼。如果主塊有三個例子。首先不提供結果,其次是部分結果,第三是完整結果。

def get_page(URL): 
    ''' 
    INPUT: url 
    OUTPUT: pandas dataframe with message board info 
    ''' 
    content = requests.get(URL).content 
    soup = BeautifulSoup(content, "html.parser") 
    rows = list(soup.find('table', id="ctl00_CP1_gv")) 
    table_lst = [] 
    for row in rows[2:-2]: 
     cell_lst = [cell for cell in list(row)[1:5]] 
     table_lst.append(cell_lst) 
    return pd.DataFrame(table_lst) 

if __name__ == '__main__': 
    url1 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=35092" 
    url2 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=35099" 
    url3 = "https://investorshub.advfn.com/Cal-Bay-International-Inc-CBYI-5520/?NextStart=1000" 
    df1 = get_page(url1) 
    df2 = get_page(url2) 
    df3 = get_page(url3) 
+0

「......但是在出現粗體或斜體的行時會中斷...」請顯示打破的代碼和錯誤消息(如果有的話)。 – DyZ

+0

道歉,'打破',是錯誤的詞選擇。它只是不提供其他頁面提供的完整結果。我將代碼添加爲示例頁面...... – schustda

+0

該webite很混亂......您能澄清一下您試圖獲得的那些網站的哪一部分,可能會有更好的標籤可用嗎? – Tony

回答

1

正如你已經注意到<b><i>..</b></i>是壞的,因此HTML格式不正確。 html.parser無法處理這項工作。我已經試過lxml針對你的測試用例,它工作。

soup = BeautifulSoup(content, "lxml") 
+0

看起來像是做到了。謝謝!我傾向於總是默認爲html.parser。 – schustda