2017-07-18 64 views
0

我意识到这可能是一个非常具体的问题,但我努力摆脱使用下面的代码获得的文本的某些部分。我需要一个普通的文章文本,通过在'class'下找到“p”标签来找到:'mol-para-with-font'。不知何故,我得到了许多其他的东西,比如作者的副标题,日期标记,最重要的是来自广告页面的文本。检查html我看不到它们包含相同的'class':'mol-para-with-font',所以我很困惑(或者我一直在盯着它太长时间...)。我知道这里有很多html大师,所以我会很感激你的帮助。Beautifulsoup:排除不需要的部分

我的代码:

import requests 
import translitcodec 
import codecs 

def get_text(url): 
    r = requests.get(url) 
    soup = BeautifulSoup(r.content, "lxml") 

    # delete unwanted tags: 
    for s in soup(['figure', 'script', 'style', 'table']): 
     s.decompose() 

    article_soup = [s.get_text(separator="\n", strip=True) for s in soup.find_all(['p', {'class':'mol-para-with-font'}])]  
    article = '\n'.join(article_soup) 

    text = codecs.encode(article, 'translit/one').encode('ascii', 'replace') #replace traslit with ascii 
    text = u"{}".format(text) #encode to unicode 
    print text 

url = 'http://www.dailymail.co.uk/femail/article-4703718/How-Alexander-McQueen-Kate-s-royal-tours.html' 
get_text(url) 

回答

1

只有'p' -s与class="mol-para-with-font"? 这会给你发送:

import requests 
from bs4 import BeautifulSoup as BS 
url = 'http://www.dailymail.co.uk/femail/article-4703718/How-Alexander-McQueen-Kate-s-royal-tours.html' 
r = requests.get(url) 
soup = BS(r.content, "lxml") 

for i in soup.find_all('p', class_='mol-para-with-font'): 
    print(i.text) 
+0

谢谢。我现在可以看到我被带走了太多的支架等...... :) – aviss