繁体   English   中英

使用美丽的汤刮页

[英]Scrape pages using beautiful soup

我有两个略有不同的网址: 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()

一个想法是刮掉与该值相关联的标签。 正如我从网站上看到的那样,包含信息的每一行都是一个带有class="property__base-info__item"li项目。

所以在第一个链接中,你有一个带有class="property__base-info__unit"的span,其文本值是'Utropspris',以及带有property__base-info__value的span,它是你已经获得的值。

你可以这样做:

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

我没有自己测试代码,但想法是遍历项目列表,并获得标记和标记的值。 然后,您可以将对保存在字典中,并根据您的喜好处理案例。

你实际上可以发现它们之间的区别。 您的数据之前还有一个跨度。

 <span class="property__base-info__unit">Utropspris</span>

如您所见,您也可以废弃此元素。 如果跨度内容是Utropspris ,这意味着数据是Utropspris,如果不是,这意味着Avgit。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM