我正在使用BeautifulSoup来搜索数据,一切都在我的代码中工作,除了一件事,那就是价格。我试图刮一个房地产网站,无法降价。网站是“https://www.proptiger.com/all-projects”
以下是我的代码:
UILabel
现在每当我运行此代码时,它都会列出超出范围的列表。
下面的是价格的html。:
<?php
$con = mysqli_connect('accountuserdb.cyietmcjutfg.us-east-2.rds.amazonaws.com','redact','redact')
$Email = $_POST('email');
$Username = $_POST('username');
$Userpass = $_POST('password');
$sql = "INSERT INTO useraccounts (Email,Username,Userpass) VALUES ('$Name','$Username','$Userpass')";
header("refresh:2; url="success.html");
?>
我想要最低价格和最高价格,所以我做文本并获得56 = -6项目的价格,然后列出超出范围。某人,我做错了什么?
答案 0 :(得分:1)
因为其中一个项目(Godrej Emerald)有要求的价格,因此没有价格。
答案 1 :(得分:1)
当您抓取不可用的信息时,您将收到该错误。如果您找到了价格并且没有为特定项目显示任何值,则会显示错误并破坏代码。它正在破裂,因为你的代码在那里说有什么东西,当真的没有。
解决这个问题的方法是使用try-except语句。
try:
pricereal = price[0].tex
except:
pricereal = "n/a"
答案 2 :(得分:1)
你没有得到这个价格,因为它在javascript中。不要感到困惑,看到所有其他项目都被印刷,但为什么价格不是。因此,为了解决这个问题,您可以将硒与BeautifulSoup结合使用。
我在这里使用了代码的必要部分:
from bs4 import BeautifulSoup
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.proptiger.com/all-projects")
time.sleep(5)
soup = BeautifulSoup(driver.page_source, "html.parser")
driver.quit()
for item in soup.find_all("section", {"class":"project-card-main-wrapper"}):
price = item.select(".project-price")[0].text if item.select(".project-price") else ""
print(price)
部分结果:
₹ 32.4 L- ₹ 88.0 L
₹ 33.6 L- ₹ 51.0 L
₹ 62.0 L- ₹ 1.25 Cr
₹ 49.9 L- ₹ 1.32 Cr
₹ 35.0 L- ₹ 50.0 L
为了使事情更清楚,请参阅以下内容:
>>> import requests
>>> link = "https://www.proptiger.com/all-projects"
>>> page = requests.get(link).text
>>> 'Umang Premiere' in page
True
>>> '₹ 35.0 L' in page
False
>>>
我是在python IDE中完成的。如您所见,找到了产品名称,但价格却没有。这是因为javascript。希望它有意义。