如何从Zillow链接中提取估计的房屋价值?

Ani*_*mar 3 html python beautifulsoup

我希望我的代码能够从此页面中获取Zestimate值,以便我可以使用它(在本例中).我该怎么做呢?10,037,774

Key*_*dar 5

首先,网站在识别Python脚本时返回不完整的数据.要处理这个问题,你必须使用假的User-Agent来执行虚假请求.

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
r = requests.get('https://www.zillow.com/homes/for_sale/19882656_zpid/34.217551,-118.600674,34.122534,-118.723412_rect/12_zm/1_fr/', headers=headers)
Run Code Online (Sandbox Code Playgroud)

这将提供页面源中可用的所有元素.但是,现在,许多元素都是使用JavaScript动态生成的.因此,它们在页面源中不可用.您想要的值是<span class id="yui_3_18_1_2_1523251661826_947">在检查元素时在开发人员工具中看到的值.

但是,在页面源中,此标记看起来像

<span class=""> $10,037,734 <span class="value-suffix">   </span></span>
Run Code Online (Sandbox Code Playgroud)

所以,你不能用它id来获得价值.您可以使用<span>包含文本Zestimate的标记soup.find('span', {'data-target-id': 'zest-tip-hdp'}).要获取下一个<span>标记,您可以使用find_next('span').

完整代码:

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
r = requests.get('https://www.zillow.com/homes/for_sale/19882656_zpid/34.217551,-118.600674,34.122534,-118.723412_rect/12_zm/1_fr/', headers=headers)
soup = BeautifulSoup(r.text, 'lxml')

zestimate = soup.find('span', {'data-target-id': 'zest-tip-hdp'}).find_next('span').text
print(zestimate)
#  $10,037,734  
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以获得这些数据.在页面源的顶部,有一个看起来像的标签

<meta property="zillow_fb:description" content="Zestimate&reg; Home Value: $10,037,734. "/>
Run Code Online (Sandbox Code Playgroud)

您可以使用标签property属性和获得的价值content使用属性['content'].为了得到这个价格,做一些简单的字符串拆分.

meta = soup.find('meta', property='zillow_fb:description')['content']
print(meta.split(':')[1])
#  $10,037,734. 
Run Code Online (Sandbox Code Playgroud)

如果您不想要圆点.,可以将其剥离.