<分区>
我希望我的代码能够取消 Zestimate 值 this page所以我可以使用它(在本例中,10,037,774
)。我该怎么做呢?
<分区>
我希望我的代码能够取消 Zestimate 值 this page所以我可以使用它(在本例中,10,037,774
)。我该怎么做呢?
最佳答案
首先,该网站在识别 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)
这将提供页面源中可用的所有元素。但是现在,很多元素都是用 JavaScript 动态生成的。因此,它们在页面源代码中不可用。你想要的值在<span class id="yui_3_18_1_2_1523251661826_947">
里面在检查元素时可以在开发人员工具中看到。
但是在页面源码中,这个标签看起来像
<span class=""> $10,037,734 <span class="value-suffix"> </span></span>
所以,你不能使用那个 id
获得值(value)。你可以获得 <span>
使用 soup.find('span', {'data-target-id': 'zest-tip-hdp'})
包含文本 Zestimate 的标签.得到下<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
还有另一种获取此数据的方法。在页面源代码的顶部,有一个看起来像
<meta property="zillow_fb:description" content="Zestimate® Home Value: $10,037,734. "/>
您可以使用 property
找到标签属性并获取 content
的值属性使用 ['content']
.要获得价格,请进行一些简单的字符串拆分。
meta = soup.find('meta', property='zillow_fb:description')['content']
print(meta.split(':')[1])
# $10,037,734.
如果你不想要点 .
, 你可以剥离它。
关于python - 如何从 Zillow 链接中提取估计的房屋值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724326/