我希望我的代码能够将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来获取值.你可以得到< 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.
如果你不想要点,你可以剥掉它.