Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # encoding: utf-8
- import argparse
- import requests
- from bs4 import BeautifulSoup
- media_projects_names = ['news', 'woman', 'afisha', 'sport', 'auto', 'weekend']
- parser = argparse.ArgumentParser()
- parser.add_argument('--stage', '-s', type=str, required=False, default=False,
- help='example, --stage=stage05')
- args = parser.parse_args()
- stage = args.stage
- if stage:
- scheme = 'http'
- stage_host = '.' + stage + '.rchannel'
- pstage = stage
- else:
- scheme = 'https'
- stage_host = ''
- pstage = 'prod'
- projects_urls_d = {
- 'Все новости': scheme + '://news' + stage_host + '.rambler.ru/?utm_source=',
- 'Финансы': 'https://finance.rambler.ru/?utm_source=',
- 'Женский': scheme + '://woman' + stage_host + '.rambler.ru/?utm_source=',
- 'Развлечения': scheme + '://afisha' + stage_host + '.rambler.ru/?utm_source=',
- 'Спорт': scheme + '://sport' + stage_host + '.rambler.ru/?utm_source=',
- 'Авто': scheme + '://auto' + stage_host + '.rambler.ru/?utm_source=',
- 'Здоровье': 'https://doctor.rambler.ru/?utm_source=',
- 'Субботний': scheme + '://weekend' + stage_host + '.rambler.ru/?utm_source=',
- 'Игры': 'https://games.rambler.ru/?utm_source='
- }
- projects_urls_m = {
- 'Все новости': scheme + '://news' + stage_host + '.rambler.ru/?utm_source=',
- 'Финансы': 'https://m.finance.rambler.ru/?utm_source=',
- 'Женский': scheme + '://woman' + stage_host + '.rambler.ru/?utm_source=',
- 'Развлечения': scheme + '://afisha' + stage_host + '.rambler.ru/?utm_source=',
- 'Спорт': scheme + '://sport' + stage_host + '.rambler.ru/?utm_source=',
- 'Авто': scheme + '://auto' + stage_host + '.rambler.ru/?utm_source=',
- 'Субботний': scheme + '://weekend' + stage_host + '.rambler.ru/?utm_source=',
- 'Игры': 'https://games.rambler.ru/?utm_source='
- }
- def create_dict_with_urls_on_site(mediaprojectname, mobile=False, stage=False):
- """ Данная функция парсит html код страницы (например, news.rambler.ru),
- затем находит элементы левого меню и создаёт из них словарь,
- где ключ = название Вертикали, а значение = url,
- например, Женский : 'https://woman.rambler.ru'
- :param mobile: False для десктопной и True для мобильной версии
- :param stage: False для дефолтного значения(прод) либо номер стейджа
- :return: словарь пар вида 'Имя вертикали': 'Url',
- например, 'Женский': 'https://woman.rambler.ru' """
- dict_with_urls = dict()
- if stage:
- host = '{}.{}.rchannel.rambler.ru'.format(mediaprojectname, stage)
- else:
- host = '{}.rambler.ru'.format(mediaprojectname)
- universal_url = '{}://{}'.format(scheme, host)
- if mobile:
- cookies = {'rswitch': 'mobile'}
- r = requests.get(universal_url, cookies=cookies)
- else:
- cookies = {'rswitch': 'desktop'}
- r = requests.get(universal_url, cookies=cookies)
- text_page = r.text
- soup = BeautifulSoup(text_page, "html.parser")
- # Если десктопная версия, то формируем список объектов, содержащих элементы
- # левого меню. Их отыскиваем в html коде страницы как теги "a" с атрибутом
- # class равным "nav-global__link" Далее наполняем словарь парами
- # Имя вертикали : значение атрибута href, то есть ссылка на вертикаль
- if not mobile:
- strings_list = soup.find_all('a', attrs={'class': 'nav-global__link'})
- for link in strings_list:
- if str(link.contents[0]).strip('\n') in projects_urls_d.keys():
- temp = str(link.get_text())
- temp = temp.strip('\n')
- dict_with_urls.update({temp: link.get('href')})
- else:
- strings_list = soup.find_all('a', attrs={'class': 'menu__item'})
- for link in strings_list[:9]:
- if str(link.contents[3].contents[0]) in projects_urls_m.keys():
- temp = str(link.get_text())
- temp = temp.strip('\n')
- dict_with_urls.update({temp: link.get('href')})
- return dict_with_urls
- # Создаём списки в которые будем добавлять по "1" в случае ошибок
- wrong_urls_list_count = [] # при ошибках в урле
- wrong_project_names_count_list = [] # при ошибках в названии вертикали/проекта
- def main():
- for media_project in media_projects_names:
- print('\nChecking DESKTOP URLS on {}({})'.
- format(media_project.upper(), pstage))
- for project_name in projects_urls_d.keys():
- if project_name in \
- create_dict_with_urls_on_site(media_project,
- stage=stage).keys():
- if projects_urls_d[project_name] \
- in create_dict_with_urls_on_site(
- media_project, stage=stage)[project_name]:
- print('{} OK |'.format(project_name), end='')
- else:
- print('{} '
- 'is NOT OK. Site:{} Script:{}'
- .format(project_name,
- create_dict_with_urls_on_site(media_project,
- stage=stage)
- [project_name][:30],
- projects_urls_d[project_name]))
- wrong_urls_list_count.append('1')
- else:
- print('Заданное в скрипте название Вертикали '
- '= {} не найдено на сайте'.format(project_name))
- wrong_project_names_count_list.append('1')
- print('\nChecking MOBILE URLS on {}({})'.
- format(media_project.upper(), pstage))
- for project_name2 in projects_urls_m.keys():
- if project_name2 in \
- create_dict_with_urls_on_site(media_project,
- stage=stage,
- mobile=True).keys():
- if projects_urls_m[project_name2] \
- in create_dict_with_urls_on_site(media_project,
- stage=stage,
- mobile=
- True)[project_name2]:
- print('{} OK |'.format(project_name2), end='')
- else:
- print('URL on {} '
- 'is NOT OK. Site:{} Script:{}'
- .format(project_name2,
- create_dict_with_urls_on_site(media_project,
- stage=stage,
- mobile=True)
- [project_name2][:45],
- projects_urls_m[project_name2]))
- else:
- print('Заданное в скрипте название Вертикали '
- '= {} не найдено на сайте'.format(project_name2))
- print('')
- print('\nКРАТКО:')
- print('Кол-во неверных названий вертикалей =',
- len(wrong_project_names_count_list))
- print('Кол-во неверных ссылок (URLS) вертикалей =',
- len(wrong_urls_list_count))
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement