2012-09-09 16 views
15

Python ile bir html dosyası ayrıştırmak istiyorum ve kullandığım modül beautifulsoup. Bunu kullandıktan sonrabeautifulsoup findAll find_all

şey garip happened.It fonksiyonu "find_all" "findall" olarak

aynı, ama ikisiyle de denedim söylenir. Ama farklı.

Herkes bana farklı söyleyebilir mi?

import urllib, urllib2, cookielib 
from BeautifulSoup import * 
site = "http://share.dmhy.org/topics/list?keyword=TARI+TARI+team_id%3A407" 

rqstr = urllib2.Request(site) 
rq = urllib2.urlopen(rqstr) 
fchData = rq.read() 

soup = BeautifulSoup(fchData) 

t = soup.findAll('tr') 
print t 
+2

kullandığınız BeautifulSoup sürümü? BS4'ü kullanmanız gerekiyorsa, içe aktarma, 'bs4 import BeautifulSoup''den olmalıdır. Bkz. Http://www.crummy.com/software/BeautifulSoup/bs4/doc/#porting-code-to-bs4 – marchelbling

+1

Fark nedir? Yani, ikisini de kullandığını ve bir fark gördüğün dedin. Farklı davranışları gösteren bazı çıktılar gönderebilir misiniz? Yoksa neden aynı şeyi yapan iki yöntem olduğunu soruyor musunuz? Bu durumda Martijn Pieters doğru. – Bakuriu

+0

find_all: findAll modülünü bulamadı: html kodunun birkaç parçasını buldu. – Oberon

cevap

33

BeautifulSoup sürüm 4'te, yöntemler tam olarak aynıdır; karışık vaka sürümleri (findAll, findAllNext, nextSibling, vb.), Python style guide'a uygun olarak yeniden adlandırılmıştır, ancak eski adları, bağlantı işlemini kolaylaştırmak için hala kullanılabilir. Tam liste için bkz. Method Names.

yeni kodunda, ancak, sürüm 3 (tarihi Mart 2012, bunu kullanmıyorum, devam ettirilmeyen BeautifulSoup kullandığınız sizin örnekte vb

yüzden find_all küçük versiyonlarını, kullanmalıdır Eğer yardımcı olabilirseniz), sadece findAll() mevcuttur. Bilinmeyen özellik adları (örneğin, BeautifulSoup 4'te bulunan .find_all gibi), bu ada sahip bir etiket arıyorsanız sanki size davranılır. Belgenizde <find_all> etiketi yok, bunun için None döndürülüyor. BeautifulSoup kaynak kodundan