我们如何使用soup.find获取嵌套div中的表

时间:2017-03-20 19:09:41

标签: python web-scraping beautifulsoup

我有一个名为 - ' class =" table-wrap MEDdata"'的div类,其中还有另一个div类 - ' table-container小屏幕-full宽度' ,在这个我有一张桌子 - ' course_catalog_table'我想要访问。这是我试图抓取的页面的链接 - http://www.nyit.edu/academics/courses/ 怎么能实现这一目标?请帮忙

  

输出:table = div.find(' table',{' id':' course_catalog_table'})   AttributeError:' ResultSet'对象没有属性'找到'

  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)

2 个答案:

答案 0 :(得分:0)

您的代码存在两个问题。 1)find_all返回一个ResultSet或一个无法用另一个find方法链接的列表,你可以在这里使用find,因为该元素是唯一的; 2)table-wrap MEDdata是类属性而不是id。解决这两个问题后,它应该有效:

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',
# ...

答案 1 :(得分: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'}

这是A LIST所以你不能在所有元素上使用 div.find ,你可以使用循环

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

或者你可以做例如div = soup.find('div' , {'class': 'table-wrap MEDdata'})[0],其中 [0] 是索引,所以你可以做[0]或[1](取决于元素的数量)和你的如果您使用此代码,代码将起作用。