现在,我正尝试浏览一个房地产网站并检索有关房地产的数据。我有一个遍历属性列表的代码,获取数据,然后转到每个属性的页面并获取更详细的数据。它可以工作,但是问题是,如果缺少任何字段,我会得到一个导致异常的错误,并使其跳到下一个属性。相反,我只想为我刚接触Python和网络抓取的所有缺失数据添加一个空值,因此可能会有更多关于如何清除代码的见解,因此也可以对此发表评论,但我大多我只是想让它在找到缺失数据的地方放空值。这是代码,其中prop_list是
的html代码for item in prop_list:
try:
d ={}
d["address"] = item.find("span", {"itemprop":"streetAddress"}).text
d["city"] = item.find("span", {"itemprop":"addressLocality"}).text
d["state"] = item.find("span", {"itemprop":"addressRegion"}).text
d["zip_code"] = item.find("span", {"itemprop":"postalCode"}).text
d["price"] = item.find("span", {"class":"data-price"}).text
d["lot_sqft"] = item.find("li", {"data-label":"property-meta-lotsize"}).find("span", {"class":"data-value"}).text
link = item.find("a").get("href")
url = "https://www.realtor.com" + link
d["url"] = url
d["longitude"] = item.find("meta",{"itemprop":"longitude"}).get("content")
d["latitude"] = item.find("meta",{"itemprop":"latitude"}).get("content")
desc_link = requests.get(url,headers=headers)
b = desc_link.content
temp = BeautifulSoup(b,"html.parser")
d["description"] = temp.find("p", {"class": "word-wrap-break"})
d["year_built"] = temp.find("li", {"data-label": "property-year"}).find("div", {"class":"key-fact-data ellipsis"}).text
l.append(d)
except:
print("exception occurred")
谢谢!
答案 0 :(得分:0)
我猜想,如果找不到特定元素,则尝试从中获取elem.text
会产生异常。如果是这种情况,那么您可以这样做:
d["address"] = item.find("span", {"itemprop":"streetAddress"}).text if item.find("span", {"itemprop":"streetAddress"}) else "-"
或另一种避免异常的方式,但是这种方式不能设置默认值,例如“-”:
d["address"] = item.find("span", {"itemprop":"streetAddress"}) and item.find("span", {"itemprop":"streetAddress"}).text
答案 1 :(得分:0)
由于您是初学者,因此我将以这种方式详细说明您的代码。只需使用如下if-else语句:
if item.find("span", {"itemprop" : "streetAddress"}):
d["address"] = item.find("span", {"itemprop":"streetAddress"}).text
else:
d["address"] = "" # or None
现在对每个元素执行这样的操作将变得很忙,所以以Python方式:
d["address"] = item.find("span", {"itemprop":"streetAddress"}).text if item.find("span", {"itemprop":"streetAddress"}) else ""
这将完全为您提供所需的东西。