bs4 .children打印出来的结果为什么是这样?

最近在练习写爬虫,在WebScrapingwithPython一书第20页中的一个例子:

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")

bsObj = BeautifulSoup(html)

for child in bsObj.find("table",{"id":"giftList"}).children:
    print(child)

我把.children换成.descendants:

for child in bsObj.find('table',{'id':'giftList'}).descendants:
    print(child)

打印出来的结果为什么会有这些重复信息,比如这个:

<tr><th>
Item Title
</th><th>
Description
</th><th>
Cost
</th><th>
Image
</th></tr>
<th>
Item Title
</th>

Item Title

<th>
Description
</th>

Description

<th>
Cost
</th>

Cost

<th>
Image
</th>

Image

问题:
1.为什么Item Title,Description,Cost,Image这些字出现了两次呢?
2.通过这个例子还是不太明白children和descendants的区别T.T哪位高人点拨下,谢谢

阅读 3.8k
2 个回答

文档不是说得挺清楚了吗,多看几次文档就理解
链接描述
clipboard.png

descendants函数的行为是遍历某个标签的子元素,同时继续递归遍历该子元素。

举个栗子:
head标签的子标签title为:

<title>The Dormouse's story</title>

则使用descendants遍历时的输出为:

<title>The Dormouse's story</title>
The Dormouse's story
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题