2017-03-20 5 views
0

div classがあります。これは私がアクセスしたいテーブル 'course_catalog_table'を持っています。ここに私が掻き取ろうとしているページへのリンクがあります。http://www.nyit.edu/academics/courses/ これはどのように達成できますか?あなたのコードには2つの問題がありますsoup.findを使用してネストされたdiv内のテーブルを取得する方法

Output: table = div.find('table', {'id':'course_catalog_table'}) AttributeError: 'ResultSet' object has no attribute 'find'

soup = BeautifulSoup(data.content, "lxml") 

    l =[] 


div= soup.find_all('div' , {'id': 'table-wrap MEDdata'}) 


table = div.find('table', {'id':'course_catalog_table'}) 


for row in table.findAll("a"): 
    l.append(row.text) 

答えて

0

助けてください。 1)find_allは、別のfindメソッドでチェーンできないResultSetまたはリストを返します。要素が一意であるため、ここでfindを使用できます。 2)table-wrap MEDdataidではなくクラス属性です。これらの2つの問題を修正した後、それが動作するはずです:

l = [] 
div = soup.find('div' , {'class': 'table-wrap MEDdata'}) 

table = div.find('table', {'id':'course_catalog_table'}) 
​ 
for row in table.findAll("a"): 
    l.append(row.text) 

l 
#['ACLS', 
# 'Advanced Cardiac Life Support', 
# 'MAOB', 
# 'Ob Gyn', 
# 'MAAN', 
# ... 
+0

このリンクを見ることができます - > http://www.nyit.edu/academics/courses/、div idはありません...そして、テーブルIDはコースデータごとに同じです –

+0

それはですなぜdivのidをclassに変更したのですか? 3つのコースのクラスが異なり、テーブルを識別するために使用できます。 – Psidom

+1

ありがとうございました!これは助けました.. div = soup.find( 'div'、{'class': 'テーブルラップMEDdata'}) table = div.find( 'table'、{'id': 'course_catalog_table'}) –

0

Psidomはあなたにこの少し説明するのが、その答えについてかなり良いアイデアを与えました。

find_all # Will give you a list of elements that you can access with an index 
div= soup.find_all('div' , {'id': 'table-wrap MEDdata'} 

これは、あなたがすべての要素にdiv.findを使用することはできませんので、あなたがループ

for elements in div: 
    print (div.find('table', {'id':'course_catalog_table'})) 

それとも[0]がどこにある例div = soup.find('div' , {'class': 'table-wrap MEDdata'})[0]のために何ができるを使用することができますLISTですインデックスのため、(要素の量に応じて)[0]または[1]を実行できます。代わりにこのコードを使用すると、コードが機能します。

関連する問題