لماذا أحصل على "النتائج" ليس لديه سمة "Findall" "باستخدام BeautifulSouroup في بيثون؟
-
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 ؛-)