火眼金睛

find()和find_all()的区别

用途不同

若网页中同种标签只有一个,则使用find(),返回一个标签,bs4.element.Tag类型
若含有多个同种标签,想要全部获取,则应使用find_all(),返回一组标签,bs4.element.ResultSet类型

返回结果类型不同

  • find()返回的类型是:bs4.element.Tag,标签
  • find_all()返回的类型是:bs4.element.ResultSet,列表
  • 注意:只有bs4.element.Tag类型才可以继续find标签;bs4.element.ResultSet返回的是列表,不能再find标签,可以尝试指定list[i]得到Tag
1
2
3
4
5
6
# 获取div标签里的a标签
list0 = soup.find('div', attrs={'class': 'mid'})
list1 = find('a', href=True)

list0 = soup.find_all('div,' attrs={'class': 'mid'})
list1 = list0[1].find('a', href=True)

奇思妙想

a标签的秘密

获取a标签里的字符串

1
2
for item in list1.find_all('a', href=True):
print(item.string)

获取a标签里的href

1
2
for item in list1.find_all('a', href=True):
print(item['href'])

添加到字典中

1
2
for item in list1.find_all('a', href=True):
dict.update({str(item.string): str(item['href'])})