2013-12-11 58 views
1

我怎样才能提取<span class="arabic_sanad arabic"> & <span class="arabic_text_details arabic">从我曾尝试以下下面SPAN unsing beautifulsoup内刮文本

<div class="arabic_hadith_full arabic"><span class="arabic_sanad arabic">حَدَّثَنَا أَبُو الْيَمَانِ، قَالَ أَخْبَرَنَا شُعَيْبٌ، قَالَ حَدَّثَنَا أَبُو الزِّنَادِ، عَنِ الأَعْرَجِ، عَنْ أَبِي هُرَيْرَةَ ـ رضى الله عنه ـ أَنَّ رَسُولَ اللَّهِ صلى الله عليه وسلم قَالَ ‏</span> 
<span class="arabic_text_details arabic">"‏ فَوَالَّذِي نَفْسِي بِيَدِهِ لاَ يُؤْمِنُ أَحَدُكُمْ حَتَّى أَكُونَ أَحَبَّ إِلَيْهِ مِنْ وَالِدِهِ وَوَلَدِهِ ‏"</span><span class="arabic_sanad arabic">‏‏.‏</span></div> 

的文字,但我没有按误差低于

print name2 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-11: ordinal not in range(128) 

CODE:

url = "http://www.sunnah.com/bukhari/8" 

parser = etree.HTMLParser() 
html = etree.parse(url, parser) 
result = etree.tostring(html.getroot(), pretty_print=True, method="html") 
soup = BeautifulSoup(result) 

results = soup.findAll("div", {"class" : "actualHadithContainer"}) 
for result in results : 
    ar = result.find("div", {"class" : "arabic_hadith_full arabic"}) 
    name2 = ar.get_text() 
    print name2 
+0

尝试用'print u“{}”.format(name2)'。更多信息:http://goo.gl/Mz0QMw –

+0

我得到name2 = ar.get_text() AttributeError:'ResultSet'对象没有属性'get_text' – Ossama

回答

0

尝试将字符串转换为Unicode,打印之前:

ar = result.find("div", {"class" : "arabic_hadith_full arabic"}, text=True) #only finds those with text inside 
name2 = unicode(ar.get_text(), encoding='utf-8') 
print name2 
+0

我得到以下错误name2 = unicode(ar.get_text() ,encoding ='utf-8') AttributeError:'ResultSet'对象没有属性'get_text' – Ossama

+0

请注意div后面的跨度,也许这就是为什么 – Ossama

+0

您是否想包含''或不? – aIKid

0

你必须为Unicode像以前所指向的字符串转换。

'ResultSet' object has no attribute 'get_text' 

要避免这个错误,你必须检查是否arget_text方法。 会发生什么情况是,使用旧代码第一个节点具有文​​本, 由于编码错误,您将得到您的错误。 修复程序时,for循环会继续,并会在没有文本的节点上出现, 因此get_text方法在此处不存在。 这样的东西应该可以工作:

for result in results : 
    ar = result.find("div", {"class" : "arabic_hadith_full arabic"}) 

    if not getattr(ar, get_text): 
     continue 

    name2 = ar.get_text() 

    print u"{}".format(name2) 
+0

仍然无法正常工作,我认为我的问题是DIV内有,因此它无法获得文本!也许 – Ossama