لماذا أحصل على "النتائج" ليس لديه سمة "Findall" "باستخدام BeautifulSouroup في بيثون؟

StackOverflow https://stackoverflow.com/questions/992183

  •  13-09-2019
  •  | 
  •  

سؤال

لذلك أنا أتعلم بيثون ببطء، وأنا أحاول تقديم وظيفة بسيطة من شأنها أن ترسم البيانات من صفحة الدرجات المرتفعة من لعبة عبر الإنترنت. هذا هو رمز شخص آخر أعيد كتابةه إلى وظيفة واحدة (والتي قد تكون المشكلة)، لكنني أحصل على هذا الخطأ. هنا هو الرمز:

>>> from urllib2 import urlopen
>>> from BeautifulSoup import BeautifulSoup
>>> def create(el):
    source = urlopen(el).read()
    soup = BeautifulSoup(source)
    get_table = soup.find('table', {'id':'mini_player'})
    get_rows = get_table.findAll('tr')
    text = ''.join(get_rows.findAll(text=True))
    data = text.strip()
    return data

>>> create('http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13')

Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    create('http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13')
  File "<pyshell#17>", line 6, in create
    text = ''.join(get_rows.findAll(text=True))
AttributeError: 'ResultSet' object has no attribute 'findAll'

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

رائع. شريحة قدمت أ عظيم إجابه لسؤال ذي صلة.

نستطيع ان نرى، من شفرة المصدر الجميلة, ، الذي - التي ResultSet فئة فرعية list.

في مثالك، get_rows هو مثيل BS's ResultSet صف دراسي،
ومنذ BS's ResultSet فئة فرعية list, ، هذا يعني Get_Rows هي قائمة.

get_rows, ، كمثال من ResultSet, ، يفعل ليس عند findAll طريقة تنفيذها؛ ومن هنا الخطأ الخاص بك.
ما الذي قام به triptych بشكل مختلف هو أعاد على تلك القائمة.
طريقة Triptych تعمل لأن العناصر الموجودة في get_rows القائمة هي حالات فئة العلامة BS؛ الذي لديه أ findAll طريقة.

لذلك، لإصلاح التعليمات البرمجية الخاصة بك، يمكنك استبدال الأسطر الثلاثة الأخيرة الخاصة بك create طريقة مع شيء مثل هذا:

for row in get_rows:
    text = ''.join(row.findAll(text=True))
    data = text.strip()
    print data

لاحظ ليونارد ريتشاردسون: بأي حال من الأحوال أقوم بإنشاء جودة عملك بالرجوع إليها مثل BS ؛-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top