Python 如何按类查找元素
我在使用Beautifulsoup解析带有“class”属性的HTML元素时遇到问题。代码如下所示Python 如何按类查找元素,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我在使用Beautifulsoup解析带有“class”属性的HTML元素时遇到问题。代码如下所示 soup = BeautifulSoup(sdata) mydivs = soup.findAll('div') for div in mydivs: if (div["class"] == "stylelistrow"): print div 脚本完成后,我在同一行上得到一个错误 File "./beautifulcoding.py", line 130, in ge
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if (div["class"] == "stylelistrow"):
print div
脚本完成后,我在同一行上得到一个错误
File "./beautifulcoding.py", line 130, in getlanguage
if (div["class"] == "stylelistrow"):
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup.py", line 599, in __getitem__
return self._getAttrMap()[key]
KeyError: 'class'
如何消除此错误?首先尝试检查div是否具有class属性,如下所示:
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if "class" in div:
if (div["class"]=="stylelistrow"):
print div
首先尝试检查div是否具有class属性,如下所示:
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if "class" in div:
if (div["class"]=="stylelistrow"):
print div
您可以使用BS3优化搜索,以仅查找具有给定类的div:
mydivs=soup.find_all(“div”,“class”:“stylelistrow”})
您可以使用BS3优化搜索,仅查找具有给定类的div:
mydivs=soup.find_all(“div”,“class”:“stylelistrow”})
直截了当的方法是:
soup = BeautifulSoup(sdata)
for each_div in soup.findAll('div',{'class':'stylelist'}):
print each_div
确保取下findAll的外壳,它不是findAll一个简单的方法是:
soup = BeautifulSoup(sdata)
for each_div in soup.findAll('div',{'class':'stylelist'}):
print each_div
确保您取下findAll的外壳,它不是findAll这对我有用:
for div in mydivs:
try:
clazz = div["class"]
except KeyError:
clazz = ""
if (clazz == "stylelistrow"):
print div
这对我很有用:
for div in mydivs:
try:
clazz = div["class"]
except KeyError:
clazz = ""
if (clazz == "stylelistrow"):
print div
从文件中:
类
:
soup.find_all("a", class_="sister")
在这种情况下:
soup.find_all("div", class_="stylelistrow")
它还将用于:
soup.find_all("div", class_="stylelistrowone stylelistrowtwo")
从文件中:
类
:
soup.find_all("a", class_="sister")
在这种情况下:
soup.find_all("div", class_="stylelistrow")
它还将用于:
soup.find_all("div", class_="stylelistrowone stylelistrowtwo")
这对我访问class属性很有效(在Beautifulsoup4上,与文档中所说的相反)。KeyError是返回的列表,而不是字典
for hit in soup.findAll(name='span'):
print hit.contents[1]['class']
这对我访问class属性很有效(在Beautifulsoup4上,与文档中所说的相反)。KeyError是返回的列表,而不是字典
for hit in soup.findAll(name='span'):
print hit.contents[1]['class']
特定于BeautifulSoup 3:
soup.findAll('div',
{'class': lambda x: x
and 'stylelistrow' in x.split()
}
)
将发现所有这些:
<div class="stylelistrow">
<div class="stylelistrow button">
<div class="button stylelistrow">
特定于BeautifulSoup 3:
soup.findAll('div',
{'class': lambda x: x
and 'stylelistrow' in x.split()
}
)
将发现所有这些:
<div class="stylelistrow">
<div class="stylelistrow button">
<div class="button stylelistrow">
更新:2016年
在最新版本的beautifulsoup中,方法“findAll”已重命名为
“找到所有人”
因此答案是
soup.find_all("html_element", class_="your_class_name")
更新:2016年
在最新版本的beautifulsoup中,方法“findAll”已重命名为
“找到所有人”
因此答案是
soup.find_all("html_element", class_="your_class_name")
如何按类查找元素
我在使用Beautifulsoup解析带有“class”属性的html元素时遇到问题
你可以通过一个类很容易地找到,但是如果你想通过两个类的交集来找到,那就有点困难了
从(增加强调)开始:
如果要搜索与两个或多个CSS类匹配的标记,应使用CSS选择器:
css_soup.select("p.strikeout.body")
# [<p class="body strikeout"></p>]
还请注意,findAll已从camelCase重命名为更具Pythonic风格的find_all
如何按类查找元素
我在使用Beautifulsoup解析带有“class”属性的html元素时遇到问题
你可以通过一个类很容易地找到,但是如果你想通过两个类的交集来找到,那就有点困难了
从(增加强调)开始:
如果要搜索与两个或多个CSS类匹配的标记,应使用CSS选择器:
css_soup.select("p.strikeout.body")
# [<p class="body strikeout"></p>]
还请注意,findAll已从camelCase重命名为更具Pythonic风格的find_all这应该可以:
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if (div.find(class_ == "stylelistrow"):
print div
这应该起作用:
soup = BeautifulSoup(sdata)
mydivs = soup.findAll('div')
for div in mydivs:
if (div.find(class_ == "stylelistrow"):
print div
CSS选择器
单班第一场比赛
soup.select_one('.stylelistrow')
匹配项列表
soup.select('.stylelistrow')
soup.select_one('.stylelistrow.otherclassname')
soup.select('.stylelistrow.otherclassname')
复合类(即和另一类)
复合类名中的空格,例如class=stylelistrow otherclassname
将替换为“.”。您可以继续添加类
课程列表(或-匹配当前的课程)
bs4.7.1+ 其
innerText
包含字符串的特定类
soup.select_one('.stylelistrow:contains("some string")')
soup.select('.stylelistrow:contains("some string")')
注意
新增:为了避免与未来CSS规范冲突
更改后,非标准伪类现在将以:-soup开始-
前缀因此,:contains()现在将被称为
:-soup-contains(),尽管有一段时间它是不推荐的
:contains()仍将被允许,并警告用户应
迁移到:-soup-contains()
新建:添加了新的非标准伪类:-soup-contains-own()
操作类似于:-soup-contains(),只是它只查看
与当前作用域元素直接关联的文本节点,以及
不是它的后代
具有特定子元素的特定类,例如a
标记
soup.select_one('.stylelistrow:has(a)')
soup.select('.stylelistrow:has(a)')
CSS选择器
单班第一场比赛
soup.select_one('.stylelistrow')
匹配项列表
soup.select('.stylelistrow')
soup.select_one('.stylelistrow.otherclassname')
soup.select('.stylelistrow.otherclassname')
复合类(即和另一类)
复合类名中的空格,例如class=stylelistrow otherclassname
将替换为“.”。您可以继续添加类
课程列表(或-匹配当前的课程)
bs4.7.1+ 其
innerText
包含字符串的特定类
soup.select_one('.stylelistrow:contains("some string")')
soup.select('.stylelistrow:contains("some string")')
注意
新增:为了避免与未来CSS规范冲突
更改后,非标准伪类现在将以:-soup开始-
前缀因此,:contains()现在将被称为
:-soup-contains(),尽管有一段时间它是不推荐的
:contains()仍将被允许,并警告用户应
迁移到:-soup-contains()
新建:添加了新的非标准伪类:-soup-contains-own()
操作类似于:-soup-contains(),只是它只查看
与当前作用域元素直接关联的文本节点,以及
不是它的后代
具有特定子元素的特定类,例如a
标记
soup.select_one('.stylelistrow:has(a)')
soup.select('.stylelistrow:has(a)')
自美联4+起 如果只有一个类名,则只需将类名作为参数传递,如下所示:
mydivs = soup.find_all('div', 'class_name')
mydivs = soup.find_all('div', ['class1', 'class2'])
或者,如果您有多个类名,只需将类名列表作为参数传递,如下所示:
mydivs = soup.find_all('div', 'class_name')
mydivs = soup.find_all('div', ['class1', 'class2'])
自美联4+起 如果只有一个类名,则只需将类名作为参数传递,如下所示:
mydivs = soup.find_all('div', 'class_name')
mydivs = soup.find_all('div', ['class1', 'class2'])
或者,如果您有多个类名,只需传递