2016-10-28 17 views
1

我有非常有限的HTML知識,我只開始美麗的湯,所以我的問題可能不正確。 我的HTML源代碼看起來像這樣使用Python分離兩個文本​​標籤使用Python BeautifSoup

<TD width="15%">Text1</TD> 
<TD width="85%">Text2<A href="link1">(6)</A> 
Text3<A href="link2">(4)</A> 
</TD> 

它出現在網頁的文本1 /文本2文本1和/ Tex3(可能是由於一些代碼,我不明白,我可能不會在這裏複製)。

但是,我想用BeautifulSoup編寫一個Python代碼來解析Python對象中的這些信息。我認爲第一步就是單獨提取文本,然後再合併它們。我能夠通過這樣的

url = "my url (static page stored locally)" 
soup = BeautifulSoup(open(url),'lxml') 
t1_soup=soup.find_all('td',{'width':'15%'}) 
t2_soup=soup.find_all('td',{'width':'75%'}) 


text1_str=[] 
for item in t1_soup: 
text1_str.append(item.text) 


text2_str=[] 
for item in t2_soup: 
text2_str.append(item.text) 

第一個for循環代碼方便地提取文本1給我的text1乾淨,但第二個for循環給了我一個字符串「文本2文字3」。我不知道如何將它們分開,以便我最終可以將其轉換爲text1/text2和text1/text3

我寫的python代碼也可能不是很有效,如果您有更好的方法建議這個,我將不勝感激。

回答

1

您可以通過查找裏面td所有a元素和獲取previous text siblings解決它:

for item in t2_soup: 
    print([a.previous_sibling.strip() for a in item.find_all("a")]) 

打印[u'text2', u'text3']

或者,你可以找到在每一個td非遞歸的所有文本節點:

for item in t2_soup: 
    print([text.strip() for text in item.find_all(text=True, recursive=False)]) 

這可能會產生額外的空字符串 - 確保過濾。

+0

This works great @alecxe。我無法自己想出這件事。 – PagMax