2017-10-12 44 views
1

我試圖從本文中提取文章文本(https://www.vanityfair.com/style/society/2014/06/monica-lewinsky-humiliation-culture)並排除底部的合法容器。文本部分看起來很容易,但似乎無法擺脫容器。我已將它與法律變量分開以便於使用。如何使用BeautifulSoup(Python)排除元素

這裏是我到目前爲止的代碼:

import requests 
from bs4 import BeautifulSoup 

base_url = 'https://www.vanityfair.com/style/society/2014/06/monica-lewinsky-humiliation-culture' 
r = requests.get(base_url) 
r_html = r.text 
soup = BeautifulSoup(r_html) 

legal = soup.find('div',{'class': 'legal-container'}) 

paragraphs = soup.find_all('p') 

for text in paragraphs: 
    print text.get_text() 

我應該如何去了解呢?

+0

而不是排除,你不能定義比所有'p'標籤更好的選擇嗎? –

+0

我試過了,但似乎找不到一個好方法。所有文本,包括合法容器中的文本都有

etc標籤。合法的容器特別在

之內,直到

;有沒有一種很好的方法來排除那些特別的或更好的定義p標籤? –

+0

選擇器'div.article-main p'如何?文章中的所有段落 –

回答

0

總是找到你想要的部分,看看你如何可以單獨提取該部分,而不是獲取所有文本,然後消除不需要的部分。

對於您的情況,您可能需要的文本將被編碼爲div中的section標籤,該標籤的class屬性爲content drop-cap。您可以使用得到這樣的:

content_div = soup.find('div', {'class': 'content drop-cap'}) 

這樣,你得到的分組由部分文本的靈活性:

sections = content_div.findAll('section') 

不過,如果你還是堅持讓所有的段落,排除法律容器具體而言,您可以從soup對象中刪除合法容器。

BeautifulSoup documentation

分解()

Tag.decompose()刪除從樹中的標籤,然後完全破壞 及其內容

如果您選擇這樣做,然後在提取文本之前刪除不想要的標籤:

soup.find('div', {'class': 'legal-container'}).decompose() 
+0

謝謝!這非常有用!我還是新來的:) –

相關問題