Пишу парсер. Нужно сохранять результат в csv файл в виде:
вопрос;категория.
Создал словарь urls в функции main.
import requests from bs4 import BeautifulSoup import csv import re def get_html(url): r = requests.get(url) return r.text # Преобразуем строку в нижний регистр def cleaner(data): s = data.lower() return s def write_csv(data): with open('zonazakona.csv', 'a') as f: order = ['question', 'cat'] writer = csv.DictWriter(f, fieldnames=order, delimiter=';') writer.writerow(data) # Делаем предложения с большой буквы def uppercase(matchobj): return matchobj.group(0).upper() def capitalize(s): return re.sub('^([а-я])|[\.|\?|\!]\s*([а-я])|\s+([а-я])(?=\.)', uppercase, s) def main(): urls = {'https://www.zonazakona.ru/forum/forum/28-obschie-voprosy-po-zhilischnomu-pravu/': 'Жилищное право', 'https://www.zonazakona.ru/forum/forum/27-forum-po-semeynomu-pravu/': 'Семейное право'} for url in urls.keys(): while True: html = get_html(url) soup = BeautifulSoup(html, 'lxml') lis = soup.find('ol', class_='ipsDataList').find_all('li', class_='ipsDataItem') for li in lis: unclean_question = li.find('div', class_='ipsDataItem_main').find('span', class_='ipsType_break').find('a').text.strip() question = capitalize(cleaner(unclean_question)) cat = urls[url] data = {'question': question, 'cat': cat} # Если количество слов 4 и выше, то записываем вопрос в csv if len(question.split()) > 3: write_csv(data) try: url = soup.find('ul', class_='ipsPagination').find('li', class_='ipsPagination_next').find('a').get('href') except: break if __name__ == '__main__': main()
В блоке
try: url = soup.find('ul', class_='ipsPagination').find('li', class_='ipsPagination_next').find('a').get('href') except: break
cat = urls[url]
Ошибка:
Traceback (most recent call last):
File "/home/mjeday/Рабочий стол/python/zonazakona/main.py", line 72, in <module>
main()
File "/home/mjeday/Рабочий стол/python/zonazakona/main.py", line 58, in main
cat = urls[url]
KeyError: 'https://www.zonazakona.ru/forum/forum/28-obschie-voprosy-po-zhilischnomu-pravu/page/2/'
Не могу понять, как сделать, чтобы в этом блоке питон не искал этот ключ словаря, а оставлял значение переменной cat по умолчанию?
Так надо: