2017-10-12 294 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

谢谢!这非常有用!我还是新来的:) –