Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用python进行WebScrap时,如果没有值,如何防止错误?_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

当使用python进行WebScrap时,如果没有值,如何防止错误?

当使用python进行WebScrap时,如果没有值,如何防止错误?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,现在我正试图浏览一个房地产网站,搜集有关房产的数据。我有一个代码,它遍历属性列表获取数据,然后转到每个属性的页面获取更详细的数据。它可以工作,但问题是,如果缺少任何字段,我会得到一个错误,导致异常并使其跳到下一个属性。相反,我想让它为任何缺失的数据设置一个null,我是Python和webscraping的新手,因此可能会有更多关于如何清理代码的见解,所以也可以随意对此进行评论,但我只是想让它在发现缺失数据的地方设置null。下面的代码中,prop_list是 for item in prop_

现在我正试图浏览一个房地产网站,搜集有关房产的数据。我有一个代码,它遍历属性列表获取数据,然后转到每个属性的页面获取更详细的数据。它可以工作,但问题是,如果缺少任何字段,我会得到一个错误,导致异常并使其跳到下一个属性。相反,我想让它为任何缺失的数据设置一个null,我是Python和webscraping的新手,因此可能会有更多关于如何清理代码的见解,所以也可以随意对此进行评论,但我只是想让它在发现缺失数据的地方设置null。下面的代码中,prop_list是

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")

谢谢

我猜,如果您没有找到特定的元素,那么尝试从中获取
elem.text
将生成异常。如果是这种情况,则可以执行以下操作:

d["address"] = item.find("span", {"itemprop":"streetAddress"}).text if item.find("span", {"itemprop":"streetAddress"}) else "-"
或者另一种避免异常的方法,但这种方法不能设置像“-”这样的默认值:


既然你是个初学者,我就用这种方式来阐述你的代码。只需使用这样的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 ""

这正是您所需要的。

也许这会给您一些想法?您可以在每个字典键分配周围包装一个try/except,但这感觉不到。。。干净。你能提供一些示例URL吗?太棒了!我刚刚运行了它,它似乎正按照你说的做。谢谢你的帮助
d["address"] = item.find("span", {"itemprop":"streetAddress"}).text if item.find("span", {"itemprop":"streetAddress"}) else ""