2013-09-23 3 views
2

Я должен удалить текст в тег заголовка из этого источника:Ошибка с Beautiful Soup

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" lang="en"> 
<head> 
    <title>Microsoft to acquire Nokia’s devices &amp; services business, license Nokia’s patents and mapping services</title> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9; IE=10" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta id="ctl00_WtCampaignId" name="DCSext.wt_linkid" /> 
    </title> 

Я использую это, чтобы удалить текст:

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] 

ourUrl = opener.open("http://www.thehindubusinessline.com/industry-and-economy/info-tech/nokia-cannot-license-brand-nokia-post-microsoft-deal/article5156470.ece").read() 

soup = BeautifulSoup(ourUrl) 
print soup 
dem = soup.findAll('p') 
hea = soup.findAll('title') 

Этот код правильно извлекает р теги, однако, не работают при попытке извлечь заголовок. Благодарю. Я включил только часть кода, не волнуйтесь, все остальное прекрасно работает.

+0

Я не могу воспроизвести вашу проблему; HTML на этой странице сломан, но оба BeautifulSoup 3 и все 3 плагина для синтаксиса для BeautifulSoup 4 дают мне правильный результат, и я могу извлечь заголовок просто отлично. –

+0

Какую версию BeautifulSoup вы используете? У серии 4.0 были проблемы. Кроме того, некоторые комбинации lxml + libxml2 имеют проблемы с определенным вводом HTML. Если вы используете BeautifulSoup 4, у вас есть lxml, установленный вообще? –

+0

Умм, какие ошибки вы получаете? Или вы получаете пустой список? Потому что я попробовал ваш код (и эту страницу тоже) и получил ** никаких ** ошибок! – JadedTuna

ответ

0

В вашем html-коде есть ошибка! У вас есть 2 </title> endtags:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" lang="en"> 
<head> 
    <title>Microsoft to acquire Nokia’s devices &amp; services business, license Nokia’s patents and mapping services</title> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9; IE=10" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta id="ctl00_WtCampaignId" name="DCSext.wt_linkid" /> 
    </title> #You already have endtag of <title> 

Таким образом, фиксированный код должен выглядеть следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html dir="ltr" lang="en"> 
<head> 
    <title>Microsoft to acquire Nokia’s devices &amp; services business, license Nokia’s patents and mapping services</title> 
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9; IE=10" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta id="ctl00_WtCampaignId" name="DCSext.wt_linkid" /> 
+0

HTML загружается с внешнего URL-адреса, я сомневаюсь, что OP может исправить страницу. Цель состоит в том, чтобы извлечь заголовок из разбитого источника HTML без его исправления. –

+0

Да, я добавил последний, потому что я не смог скопировать весь источник. Извините, но почему это не работает. Кстати, bs4. – user2784753

+0

Вы знаете, попробуйте просто 'soup.find (" something ")' – JadedTuna