Python 类属性的多个值
我正在尝试使用beautifulsoup为来自维基百科的人获取生日。例如,他的生日是1899年8月4日。要到达bday,我使用以下代码: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解析器。以下内容
bday = url.find("span", class_="bday")
但是,它正在选取bday
作为另一个标记的一部分出现在html代码中的实例。i、 e1985-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]