无法在BeautifulSoup中删除一些细节

时间:2017-09-23 22:30:19

标签: javascript python web-scraping beautifulsoup

我正在使用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项目的价格,然后列出超出范围。某人,我做错了什么?

3 个答案:

答案 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。希望它有意义。