【问题标题】:Scrape pages using beautiful soup用漂亮的汤刮掉页面
【发布时间】:2017-08-15 04:14:15
【问题描述】:

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

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

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

    所以在第一个链接中,您有一个带有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
    

    我没有自己测试过代码,但是想法是遍历item的列表,得到tag和tag的值。然后,您可以将这些对保存在字典中,并以您喜欢的方式相应地处理案例。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        • 2017-12-23
        • 2020-06-14
        • 1970-01-01
        相关资源
        最近更新 更多