URL, чтобы очистить Жанр
url = requests.get('http://books.toscrape.com/index.html')
soup = BeautifulSoup(url.text, 'html.parser')
navlist = soup.select('.nav-list')[0].find('li').find('ul').findAll('li')
Список жанров на сайте
genre_list = []
Список сломанных романов
novel_list = []
Для L oop до l oop через navlist для добавления жанра в список genre_list
for i in navlist:
a = i.find('a').getText()
genre_list.append(a.strip().lower())
Для L oop до l oop через список жанров
for x, y in enumerate(genre_list):
count = 1
url_1=requests.get(f'http://books.toscrape.com/catalogue/category/books/{y}_{x+2}/page
{count}.html')
url_2 = requests.get(f'http://books.toscrape.com/catalogue/category/books/{y}_{x+2}/index.html')
url = url_1
if url.status_code == 404:
url = url_2
else:
url = url_1
while url:
soup1 = BeautifulSoup(url.text, 'html.parser')
novel = soup1.select('.product_pod')
count += 1
для l oop до l oop каждого романа, чтобы получить его название, стоимость, рейтинги
for i, j in enumerate(novel):
rate_list = ['One', 'Two', 'Three', 'Four', 'Five']
novel_1 = novel[i].find('h3')
title = novel_1.find('a').get('title')
cost = novel[i].find('p', class_='price_color').getText().strip('Â')
L oop для поиска романов определенного рейтинга
for rating in rate_list:
rate = novel[i].find('p', class_=f'{rating}')
if rate:
novel_list.append({'Title': title, 'Rating': rating, 'Price': cost, 'Genre': y})
if url == url_2:
break
else:
url=requests.get(f'http://books.toscrape.com/catalogue/category/books/{y}_{x + 2}/page
{count}.html')
Запись этих романов в мой файл CSV
with open('novel.csv','w', encoding="utf-8", newline='') as f:
fieldnames = ['Title', 'Rating', 'Price', 'Genre']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for i in novel_list:
writer.writerow(i)