使用美丽的汤刮页

时间:2017-03-22 20:26:01

标签: python web-scraping beautifulsoup

我有两个略有不同的网址:https://www.booli.se/annons/2278076https://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()

2 个答案:

答案 0 :(得分:2)

一个想法是刮掉与该值相关联的标签。正如我从网站上看到的那样,包含信息的每一行都包含在liclass="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。