我正在使用BS4抓取一个网站(我们有权抓取但无法控制html)并且他们稍微改变了格式。这种变化意味着我无法找到一种方法来抓住一个小段。
这是html
<p class="icons">
<span data-caption=" Bed"> 8</span>
<span data-caption=" Bath">4</span>
<span data-caption=" Car">4</span>
<span data-caption="">1090m²
</p>
我正在尝试使用
获取床的数量bed = soup.find("span",{"data-caption":" Bed"})
然后使用
进行清理bed = bed.replace(" ","")
但每次床都设置为无。有关如何抓住它的任何见解?
答案 0 :(得分:1)
使用strip
函数去除所有前导或尾随空格。 .text
可帮助您获取该特定代码的内容。
>>> s = """<p class="icons">
<span data-caption=" Bed"> 8</span>
<span data-caption=" Bath">4</span>
<span data-caption=" Car">4</span>
<span data-caption="">1090m²
</p> """
>>> soup = BeautifulSoup(s)
>>> soup.find("span",{"data-caption":" Bed"}).text.strip()
'8'
答案 1 :(得分:1)
您正尝试在元素上使用replace
方法:
>>> soup.find("span",{"data-caption":" Bed"})
<span data-caption=" Bed"> 8</span>
>>> soup.find("span",{"data-caption":" Bed"}).replace(' ', '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable
BeautifulSoup允许您仅按名称查找元素作为属性。 BeautifulSoup无法理解的任何属性都会被该名称转换为元素的搜索。
因为您在元素上使用了名称.replace
,所以BeautifulSoup正在尝试查找<replace>
元素。没有这样的元素,因此返回None
:
>>> soup.find("span",{"data-caption":" Bed"}).replace is None
True
您需要做的就是使用element.get_text()
method:
>>> soup.find("span",{"data-caption":" Bed"}).get_text()
u' 8'
您可以为其指定一个strip
关键字参数,将其设置为True
,以便为您删除文本元素(从开头和结尾删除空格):
>>> soup.find("span",{"data-caption":" Bed"}).get_text(strip=True)
u'8'