我有两个略有不同的网址:https://www.booli.se/annons/2278076,https://www.booli.se/bostad/507292
第一页和第二页之间的区别:在第二页中没有Utropspris(估计价格)。
在第一个链接中,我将使用以下代码获得估计价格(Utropspris):
in[1]= soup.findAll('span', class_='property__base-info__value')[1].text.strip()
out[1]= u'3 800 000 kr\n\t\t\t64 407 kr/m\xb2'
然而,在使用上面我使用的相同代码的第二个链接中,我将收取费用(Avgift)
in[2]= soup.findAll('span', class_='property__base-info__value')[1].text.strip()
out[2]= u'4 425 kr/m\xe5n'
我如何告诉我的代码,当我使用相同的代码时,在第二个链接中,这不再是估计价格(Utropspris)。这是费用(avgift),保存为费用和估计价格写入NA。这是我的代码的一部分,可能会有所帮助。
url=https://www.booli.se/bostad/507292
import requests
from bs4 import BeautifulSoup
request = requests.get(url)
soup = BeautifulSoup(request.text,'lxml')
soup.findAll('span', class_='property__base-info__value')[1].text.strip()
答案 0 :(得分:2)
一个想法是刮掉与该值相关联的标签。正如我从网站上看到的那样,包含信息的每一行都包含在li
项class="property__base-info__item"
中。
因此,在第一个链接中,您的跨度为class="property__base-info__unit"
,其文本值为“Utropspris”,跨度为property__base-info__value
,这是您已获取的值。
你可以这样做:
elements = soup.findAll('li', class_='property__base-info__item')
pairs = {}
for element in elements:
tag = element.find('span', class_='property__base-info__unit').text
value = element.find('span', class_='property__base-info__value').text
pairs[tag] = value
我没有自己测试代码,但想法是遍历项目列表,并获取标记和标记的值。然后,您可以将对保存在字典中,并根据您的喜好处理案例。
答案 1 :(得分:1)
您实际上可以找到它们之间的区别。您的数据之前还有一个跨度。
<span class="property__base-info__unit">Utropspris</span>
如您所见,您也可以废弃此元素。如果span内容为Utropspris
,则表示数据为Utropspris,如果不是,则表示Avgit。