Ani*_*mar 3 html python beautifulsoup
我希望我的代码能够从此页面中获取Zestimate值,以便我可以使用它(在本例中).我该怎么做呢?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)
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® 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)
如果您不想要圆点.,可以将其剥离.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |