2014-01-03 2 views
4

Я пытаюсь разобрать веб-сайт, и я собираюсь использовать его позже в своем проекте Django. Для этого я использую urllib2 и BeautifulSoup4. Однако я не мог получить то, что хочу. Вывод объекта BeautifulSoup является странным. Я пробовал разные страницы, он работал (выход нормальный). Я думал, что это из-за страницы. Затем, когда мой друг попытался сделать то же самое, он получил нормальную производительность. Я не мог понять проблему.BeautifulSoup soup.prettify() дает странный вывод

Это website Я собираюсь разобрать.

Это пример странного вывода после команды «soup.prettify()»:

t d  B G C O L O R = " # 9 9 0 4 0 4 "  w i d t h = " 3 " &gt; i m g  S R C = " 1 p . g i f "  A L T  B O R D E R = " 0 "  h e i g h t = " 1 "  w i d t h = " 3 " &gt; / t d &gt; \n   / t r &gt; \n   t r &gt; \n     t d  c o l s p a n = " 3 "  B G C O L O R = " # 9 9 0 4 0 4 "  w i d t h = " 6 0 0 "  h e i g h t = " 3 " &gt; i m g  s r c = " 1 p . g i f "  w i d t h = " 6 0 0 " \n     h e i g h t = " 1 " &gt; / t d &gt; \n   / t r &gt; \n / t a b l e &gt; \n / c e n t e r &gt; / d i v &gt; \n \n p &gt; &amp;n b s p ; &amp;n b s p ; &amp;n b s p ; &amp;n b s p ; / p &gt; \n / b o d y &gt; \n / h t m l &gt;\n </p>\n </body>\n</html>' 
+2

Можете ли вы опубликовать код, который вы использовали? –

+0

Это похоже на то, что написал @Hooked. Вот что я использовал: импорт urllib2 из BS4 импорта BeautifulSoup страница = urllib2.open ("http://kafemud.bilkent.edu.tr/monu_tr.html") суп = BeautifulSoup (страница) печати soup.prettify() – aburak

ответ

5

Вот минимальный пример, который делает работу для меня, в том числе фрагмент HTML, который вам есть проблема с. Трудно сказать без вашего кода, но я предполагаю, что вы сделали что-то вроде ' '.join(A.split()) где-то.

import urllib2, bs4 

url = "http://kafemud.bilkent.edu.tr/monu_tr.html" 
req = urllib2.urlopen(url) 
raw = req.read() 
soup = bs4.BeautifulSoup(raw) 

print soup.prettify().encode('utf-8') 

Отдает:

.... 
<td bgcolor="#990404" width="3"> 
     <img alt="" border="0" src="1p.gif" width="3"/> 
     </td> 
     <td bgcolor="#FFFFFF" valign="TOP"> 
     <div align="left"> 
     <table align="left" border="0" cellpadding="10" cellspacing="0" valign="TOP" width="594"> 
     <tr> 
      <td align="left" valign="top"> 
      <table align="left" border="0" cellpadding="0" cellspacing="0" class="icerik" width="574"> 
.... 
+0

Это дало тот же странный вывод на моем компьютере. – aburak

0

Возможно, вы и ваш друг использовать различные парсер. BeautifulSoup будет использовать парсер, который он считает «лучшим», и поэтому предпочитает lxml по причинам скорости (если установлен). Если используются последние версии Python (и последняя версия включенного парсера), есть случаи, которые лучше обрабатываются BeautifulSoup(text, 'html.parser'); это так, например. когда в текстовом содержимом выделены маски < (вместо &lt;).

0

Похоже, что у вас есть ваш XML-код с кодировкой, которую beautifulsoup не ожидает. Я предполагаю, что ваш XML находится в UTF-16, а beautifulsoup читает его как UTF-8. Python предлагает функции .encode и .decode для переключения между различными кодировками. Что-то вроде

myXmlStr.encode("utf-16").decode("utf-8") 

Возможно, вы решите проблему, если проблема заключается в вашей входящей кодировке XML. Я новичок в красивый суп себя, но быстро Google показывает, что если проблема кодирование на выходе, приукрасить принимает параметр кодирования:

soup.prettify("utf-16") 

Без дополнительной информации, которую я не могу дать вам более четкий ответ - но, надеюсь, это указывает на полезное направление.

Смежные вопросы