Carson1

Untitled

May 31st, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.67 KB | None | 0 0
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import re
  4. class WikiArtHandler:
  5.     def __init__(self):
  6.         self.page = requests.get('https://www.wikiart.org/ru')
  7.         self.soup = BeautifulSoup(self.page.text, 'html.parser')
  8.         pass
  9.    
  10.     def get_genres(self):
  11.         # возвращает список жанров
  12.         artist_genre_list = self.soup.find(class_='popular-dictionaries view-dictionaries-container')
  13.         d = artist_genre_list.get_attribute_list('ng-init')[0]
  14.         d = re.split('[}{,;".}:]', d)
  15.         self.genre_names = set()
  16.         for i in range(len(d) - 1):
  17.             for c in d[i]:
  18.                 if c.isupper():
  19.                     self.genre_names.add(d[i])
  20.         useless_words = {'Title', 'Url', 'PopularDictionariesViewModel', 'popularDictionariesModel = ','Items', 'GroupTitle', 'TotalViews', 'Стиль', 'Высокое Возрождение '}
  21.         self.genre_names.difference_update(useless_words)
  22.         self.genre_names = list(self.genre_names)
  23.         print(self.genre_names)
  24.         pass
  25.        
  26.     def get_artists(self):
  27.         # возвращает список художников
  28.         artist_name_list = self.soup.find(class_='popular-artists view-dictionaries-container')
  29.         d = artist_name_list.get_attribute_list('ng-init')[0]
  30.         d = re.split('[}{,;".}:]', d)
  31.         self.artist_names = set()
  32.         for i in range(len(d) - 1):
  33.             for c in d[i]:
  34.                 if c.isupper():
  35.                     self.artist_names.add(d[i])
  36.         useless_words = {'Title', 'Url', 'PopularArtistsViewModel', 'popularArtistsModel = ','TotalViews'}
  37.         self.artist_names.difference_update(useless_words)
  38.         self.artist_names = list(self.artist_names)
  39.         print(self.artist_names)
  40.         pass
  41.        
  42.     def get_artist(self, genre):
  43.         # возвращает список художников данного жанра
  44.         self.genre = genre
  45.         self.genres = dict()
  46.         genres = self.soup.find(class_='popular-dictionaries view-dictionaries-container')
  47.         d = genres.get_attribute_list('ng-init')[0]
  48.         d = re.split('[}{,;.}]', d)
  49.         for i in range(len(d) - 3):
  50.             if genre in d[i]:
  51.                 self.genres[self.genre]=d[i + 1]
  52.                 self.genres[self.genre] = re.split('[ ":]', self.genres[self.genre])
  53.                 for i in range(len(self.genres[self.genre])):
  54.                 if '/' in self.genres[self.genre][i]:
  55.                     self.genres[self.genre] = self.genres[self.genre][i]
  56.         self.url= 'https://www.wikiart.org' + self.genres[self.genre]
  57.         page = requests.get(self.url)
  58.         soup = BeautifulSoup(page.text, 'html.parser')    
  59.         artist_name_list = str(soup.find(class_='artists-list-container'))
  60.         self.d = re.split('" ', artist_name_list)
  61.         self.artist_names_works = dict()
  62.         self.artist_from_genre = []
  63.         for i in self.d:
  64.             if 'target="_self"' in i:
  65.                 self.artist_from_genre.append(i)
  66.         #print(self.artist_from_genre)
  67.         start = 'target="_self">'
  68.         end = '</a>'
  69.         #print(self.artist_from_genre)
  70.         for i in range(len(self.artist_from_genre)):
  71.             self.artist_from_genre[i] = self.artist_from_genre[i][self.artist_from_genre[i].find(start)+len(start):self.artist_from_genre[i].rfind(end)]
  72.         print(self.artist_from_genre)
  73.         pass
  74.        
  75.     def get_works(self, artist):
  76.         # возвращает список всех работ данного художника
  77.         self.artist = artist
  78.         self.artist_works = dict()
  79.         for i in range(len(self.d)):
  80.             if self.artist in self.d[i]:
  81.                 self.artist_works[self.artist] = self.d[i - 1]
  82.         start = 'artistUrl='
  83.         end = ' '
  84.         self.artist_works[self.artist] = self.artist_works[self.artist][self.artist_works[self.artist].find(start)+len(start):self.artist_works[self.artist].rfind(end)]
  85.         self.new_url= 'https://www.wikiart.org/ru/' + self.artist_works[self.artist]
  86.         page = requests.get(self.new_url)
  87.         soup = BeautifulSoup(page.text, 'html.parser')
  88.         works = soup.find_all(class_='artwork-name')
  89.         new_works = []
  90.         for i in works:
  91.             new_works.append(str(i))
  92.         start1 = '">'
  93.         end1 = '</a>'
  94.         for i in range(len(new_works)):
  95.             new_works[i] = new_works[i][new_works[i].find(start1)+len(start1):new_works[i].rfind(end1)]
  96.         print(new_works)
  97.         pass
  98. t = WikiArtHandler()
  99. print(t.get_genres())
  100. print(t.get_artists())
  101. print(t.get_artist(t.genre_names[1]))
  102. print(t.get_works(t.artist_from_genre[2]))
Advertisement
Add Comment
Please, Sign In to add comment