Python 类属性的多个值

Python 类属性的多个值,python,beautifulsoup,Python,Beautifulsoup,我正在尝试使用beautifulsoup为来自维基百科的人获取生日。例如,他的生日是1899年8月4日。要到达bday,我使用以下代码: bday = url.find("span", class_="bday") 但是,它正在选取bday作为另一个标记的一部分出现在html代码中的实例。i、 e1985-11-10 是否有方法仅将确切的类标记与bday匹配 我希望问题是清楚的,因为目前我得到的bday是1985-11-10,这不是正确的日期。尝试使用beautifulsoup解析器。以下内容

我正在尝试使用beautifulsoup为来自维基百科的人获取生日。例如,他的生日是1899年8月4日。要到达bday,我使用以下代码:

bday = url.find("span", class_="bday")
但是,它正在选取
bday
作为另一个标记的一部分出现在html代码中的实例。i、 e
1985-11-10

是否有方法仅将确切的类标记与
bday
匹配

我希望问题是清楚的,因为目前我得到的
bday
是1985-11-10,这不是正确的日期。

尝试使用
beautifulsoup
解析器。以下内容将查找只有
bday
类的
标记(在本页中只有一个):

>>从lxml.html.soupparser导入fromstring
>>>root=fromstring(open('Ezra_Taft_Benson'))
>>>span_bday_nodes=root.findall('.//span[@class=“bday”]”)
[]
>>>span\u b日期\u节点[0]。文本
'1899-08-04'

当BeautifulSoup的所有其他匹配方法都失败时,您可以使用带有单个参数(标记)的函数:

>>url.find(lambda标记:tag.name=='span'和tag.get('class',[])=='bday'])
1899-08-04

上面搜索的是一个
span
标记,其class属性是单个元素的列表(“bday”)。

import urllib
from BeautifulSoup import BeautifulSoup

url = 'http://en.wikipedia.org/wiki/Ezra_Taft_Benson'
file_pointer = urllib.urlopen(url)
html_object = BeautifulSoup(file_pointer)

bday = html_object('span',{'class':'bday'})[0].contents[0] 

这将返回
1899-08-04
作为
bday

的值,这是一个非常简单的解决方案!谢谢lambda标记在做什么?
lambda
使用单个参数(标记)创建匿名函数。您可以定义一个单独的命名函数,并将其名称传递给
find()
,但简而言之,一次性函数
lambda
>>> url.find(lambda tag: tag.name == 'span' and tag.get('class', []) == ['bday'])
<span class="bday">1899-08-04</span>
import urllib
from BeautifulSoup import BeautifulSoup

url = 'http://en.wikipedia.org/wiki/Ezra_Taft_Benson'
file_pointer = urllib.urlopen(url)
html_object = BeautifulSoup(file_pointer)

bday = html_object('span',{'class':'bday'})[0].contents[0]