2015-10-27 132 views
1

這是從網站的源代碼佈局:BS4如何在不使用.text的情況下獲取文本?

<div class="address"> 
    <a href="https://website.ca/classifieds/59-barclay-street/"> 
     59 Some Street<br />City, Zone 1 
    </a> 
</div> 

我想獲得的街道號碼,路線,以及城市地理編碼谷歌。如果我這樣做

>>>article.find('div', {'class': 'address'}).text 
'59 Some StreetCity, Zone 1' 

它帶走了<br />,我離開了,沒有辦法從分裂城市的航線。如果我做str().replace('<br />',', ')那麼我必須以某種方式將其再次轉換爲之前的任何類型,因此我可以使用.text來獲取<a href>之間的實際文本,效率很低。我想使用.text用於獲取實際文本的功能,但沒有刪除<br>內容的功能。我在env找不到一個名爲BeautifulSoup.py的文件,所以我正在查看GitHub上的BeautifulSoup源代碼,並且在那裏我找不到def text,我不知道在哪裏可以看到。

更新:

articles = page_soup.find('h2', text='Ads').find_next_siblings('article') 
for article in articles: 
    link = article.find('a') 
    br = link.find('br') 
    ad_address = br.previous_sibling.strip() + ', ' + br.next_sibling.strip().partition(', Zone ')[0] 
    #ad_address = link.br.replace_with(', ').get_text().strip().partition(', Zone ') 
+0

您可以用'article.find( '格',{ '類': '地址'})。string' –

+0

這並沒有做任何事情,並打印爲「無」 – dtgq

回答

3

您可以找到br分隔標籤,並獲得兄弟姐妹周圍:

In [4]: br = soup.select_one("div.address > a > br") 

In [5]: br.previous_sibling.strip() 
Out[5]: u'59 Some Street' 

In [6]: br.next_sibling.strip() 
Out[6]: u'City, Zone 1' 

您也可以找到br元素,將其替換爲使用空間replace_with()

In [4]: a = soup.select_one("div.address > a") 
In [5]: a.br.replace_with(" ") 

In [6]: a.get_text().strip() 
Out[6]: u'59 Some Street City, Zone 1' 

或者,您也可以加入a標籤內的所有文本節點:

In [7]: a = soup.select_one("div.address > a") 
In [8]: " ".join(a.find_all(text=True)).strip() 
Out[8]: u'59 Some Street City, Zone 1' 
+0

這工作,謝謝。你擅長這個! – dtgq

+0

@vandidant謝謝,你也可以使用'replace_with()' - 更新,檢查出來。 – alecxe

+0

我有一個關於'replace_with()'的問題,我注意到它正在改變'
'在湯和'a'中。在文檔中它表示它將一個字符串替換爲另一個字符串,這是否意味着'replace_with()'每次都複製整個湯並刪除舊的字符串? – dtgq

0

嘗試:

for link_to_text in links: 
    Print link_to_text.get_text() 
相關問題