2013-07-15 11 views
6

Bir web sitesindeki (http://brooklynexposed.com/events/) içeriği ayıklamak için BeautifulSoup kullanmaya çalışıyorum. Bu birlikte adı Komedi Show liste dışı kesiyorBeautifulSoup tüm html'leri ayıklamıyor (otomatik olarak bir sayfanın html'sini siliyor)

 <li class="event"> 
     9:00pm - 11:00pm 
     <br/> 
     <a href="http://brooklynexposed.com/events/entry/5432/2013-07-16"> 
     Comedy Sh 
     </a> 
     </li> 
     </ul> 
    </div> 
    </div> 
    </div> 
    </div> 
</body> 
</html> 

:

import urllib 
import bs4 as BeautifulSoup 

url = 'http://brooklynexposed.com/events/' 
html = urllib.urlopen(url).read() 

soup = BeautifulSoup.BeautifulSoup(html) 
print soup.prettify().encode('utf-8') 

çıkışı aşağıdaki gibi html kesmeye görünüyor: Ben aşağıdaki kodu çalıştırabilirsiniz sorunun bir örnek olarak Son kapanış etiketlerine kadar gelen tüm html ile. Html'nin çoğunluğu otomatik olarak kaldırılıyor. Sayısız web sitesinde benzer şeyleri fark ettim, eğer sayfa çok uzunsa, BeautifulSoup tüm sayfayı ayrıştırmaz ve sadece metni keser. Bunun için herhangi birinin çözümü var mı? Eğer BeautifulSoup bu tür sayfaları ele alamıyorsa, başka herhangi bir kütüphaneyi prettify() ile benzer işlevlere sahip biri yapar mı?

+3

Kodunuz benim için gayet iyi çalışıyor. Eğer ağ aktarımı bu noktadan kesildiyse (bu yüzden sadece Komedi Sh''e kadar yüklediniz), HTML ayrıştırıcısı tüm açık etiketleri 'kapatacak ve tam olarak ne yaptığınızı göreceksiniz. –

+1

Benim için tüm içerik var. 'Çorba' nesnesini oluşturmak için kodunuzdan başlayarak: '>>> len (unicode (çorba))' geri döndürür 107578' Hangi BS sürümünü kullanıyorsunuz? 4.2.0 kullanıyorum. –

+0

İlginç, Python 2.7 ile 4.2.1 kullanıyordum. Ancak 3.2 kullandığımda işe yaramış görünüyor. Bir zaman aşımı sorunu olmazdı çünkü orijinal HTML'yi bir dosyaya yazdırırsam, tüm metinler ortaya çıktı. 2.7 için bir çözüm üzerinde başka herhangi bir fikir? Aksi halde kodumu açmaya başlama zamanı. – user2540231

cevap

0

Benim için iyi çalışıyor, ama ben soup.prettify().encode('utf-8')

>>> from BeautifulSoup import BeautifulSoup as bs 
>>> 
>>> import urllib 
>>> url = 'http://brooklynexposed.com/events/' 
>>> html = urllib.urlopen(url).read() 
>>> 
>>> 
>>> soup = bs(html) 
>>> soup.prettify().encode('utf-8') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 8788: ordinal not in range(128) 
>>> 
>>> soup.prettify() 
'<!doctype html>\n<!--[if lt IE 7 ]&gt; 
&lt;html class="no-js ie6" lang="en"&gt; &lt;![endif]-->\n 
<!--[if IE 7 ]&gt; 
... 
... 
... 
... 
</body>\n</html>\n' 

derken hatası alıyorum. . . . Sanırım bu size yardımcı olabilir: BeautifulSoup, where are you putting my HTML?

0

Bazı makinelerde ve bazılarında bs4'ün html'yi kesmesi gibi sorunlar yaşadım. ..

soup = bs4.BeautifulSoup(html, 'html5lib') 

ve şimdi çalışır: Bu

Bu geçiş .... reproducable değildi.

İlgili konular