Python Web Scraping:如何使用 Try/Except 处理缺失值

Python Web Scraping: How to use Try/Except to handle missing values

我正在尝试使用 Try/Except 来处理潜在的缺失值,因为我通过包含餐厅数据的 URL 列表进行了抓取。我需要每个列表的长度相等才能制作 pandas DataFrame。

我正在尝试将缺失值编码为 None 或其他一些可识别的形式。目前,websites列表的长度是71,而其他的是76。错误是:ValueError: arrays must all be same length.

抓取代码(见Try/Except部分):

# Initialize lists
names = []
addresses = []
zip_codes = []
websites = []

# Scrape through list of urls
for link in url_list:
    r = requests.get(link).text
    soup = BeautifulSoup(r, 'lxml')

    place_name = soup.find('h1').text
    names.append(place_name)

    place_data = soup.find('h6')

    place_address = place_data.text.split(',')[0]
    addresses.append(place_address)

    place_zip = place_data.text.split(',')[1][1:5]
    zip_codes.append(place_zip)

    # Replace missing value with None
    try:
        place_web = place_data.a['href']
        websites.append(place_web)
    except Exception as e:
        place_web = None

当我想像这样创建一个 DataFrame 时,我基本上会遇到错误:

restaurant_data = pd.DataFrame({'name' : names, 
                                'address' : addresses, 
                                'zip_code' : zip_codes,
                                'website' : websites})

我也尝试将 None 更改为 'NA' 之类的字符串,但错误仍然存​​在。我不想继续无休止地发送 GET 请求。有没有人知道如何解决这个问题?谢谢。

一点:强烈建议将数据保存在本地,这样可以处理解析错误,而无需诉诸多次请求。

# Some code to loop over URLS

response = requests.get(url, headers=headers )
with open('some_pattern_{}.{}'.format(x, 'html'), 'w') as f:
    f.write(response.text)

如果没有什么可附加的,那为什么要附加None?也许是这样的?

try:
    some_logic()
except:
    pass #or print or log to a file to review later. 

那么你的数据框中就不会有垃圾。您在 Pandas 中的具体错误是什么?

根据您的描述,问题似乎是您没有向网站列表中添加足够的项目。您可以使用此数组初始化器创建一个大小为 5 的空列表:

websites = [None] * 5

这将生成一个仅

的列表
[None, None, None, None, None]

您还必须实际将其附加到您的网站列表中,您在当前的 except 语句中没有这样做,因此您的 try except 看起来像

try:
    place_web = place_data.a['href']
    websites.append(place_web)
except Exception as e:
    place_web = [None] * 5
    websites.append(place_web)

这也有点假设网站列表的大小始终相同,是这样吗?即如果它没有失败,它总是有 6 个链接?