Вы получаете эту ошибку, когда пытаетесь извлечь данные из объекта со значением None. Если вы видите это в строке 18, это означает, что ваш soup.find(id = "productTitle")
не соответствует чему-либо и вернул None.
Вам необходимо разбить обработку на этапы. Проверьте возвращаемое значение, прежде чем получить к нему доступ. Итак ...
title_info = soup.find(id = "productTitle")
if title_info:
title = title_info.text
else:
'handle the situation'