我想从一个块中提取产品名称。我正在使用BeautifulSoup,问题是当我尝试从select()
获取产品名称时,它返回预期的数据,当我尝试find()
时,它返回none。为什么find()
无效。
from bs4 import BeautifulSoup
data = '''<span id="productTitle" class="a-size-large"> Alien 3 </span>'''
soup = BeautifulSoup(data)
print(soup.select('.a-size-large')[0].text.strip())
>>> 'Alien 3'
print(soup.find('.a-size-large')) # Not working ??
>>> None
答案 0 :(得分:1)
您可以尝试这样的事情:
>>> soup.find('', {'class': 'a-size-large'})
<span class="a-size-large" id="productTitle"> Alien 3 </span>
因为您需要指定需要搜索的属性。对于第一个参数,它是空的,但您可以指定任何html元素,如:
>>> soup.find('span', {'class': 'a-size-large'})
<span class="a-size-large" id="productTitle"> Alien 3 </span>
然后它将仅搜索特定的span标签。但是留空将搜索类名等于给定的所有标签。
同时避免在搜索时使用.
类名。
答案 1 :(得分:1)
select()
函数需要一个CSS选择器作为参数。然而,find()
函数需要标记名称和/或属性作为参数。
文档说(关于find()
):
签名:查找(姓名,attrs,递归,字符串,** kwargs)
因此,有三种方法可以获得所需的标记:
soup.select('.a-size-large')[0].text.strip()
或
soup.select_one('.a-size-large').text.strip()
soup.find('span', class_='a-size-large').text.strip()
或
soup.find('span', {'class': 'a-size-large'}).text.strip()
soup.find(class_='a-size-large').text.strip()
或
soup.find(True, {'class': 'a-size-large'}).text.strip()
全部给出Alien 3
作为输出。