Почему в парсинге сайта мне выводит -1?
делал парсер для сайта на python. юзал библиотеки BeautifulSoup и requests. захотел вывести названия фильмов, но выдает это. не получается вытащить текст, ибо '-1' это тип данных int, и он конфликтует с str. -1 Проклятый путь -1 Унесенные призраками -1 Адаптация -1
код:
from bs4 import BeautifulSoup
import requests
URL = 'https://www.film.ru/movies'
site = 'https://www.film.ru'
res = requests.get(URL).content
soup = BeautifulSoup(res, 'lxml')
a = soup.find('div', class_ = 'rating infinite_scroll')
for i in a:
strong = i.find('strong')
print (strong)
в чем ошибка?
Ответы (2 шт):
Автор решения: Vadim.Sharoikin
→ Ссылка
наверное не лучшее решение но работает для данного случая(а почему выводятся цифры вам написали в комментариях)
from bs4 import BeautifulSoup
import requests
URL = 'https://www.film.ru/movies'
res = requests.get(URL).content
soup = BeautifulSoup(res, 'lxml')
a = soup.find('div', class_ = 'rating infinite_scroll')
for i in a:
strong = i.find('strong')
if type(i.find('strong'))!=int:
print(strong.get_text())
Автор решения: gil9red
→ Ссылка
Можно использовать css-селектор div.rating.infinite_scroll > a, чтобы описать получения тегов <a>, которые напрямую вложены (для этого указывается >) в <div> с class="rating infinite_scroll", а там будет просто получить ссылку на фильм, на постер и т.п.
from urllib.parse import urljoin
from bs4 import BeautifulSoup
import requests
URL = 'https://www.film.ru/movies'
rs = requests.get(URL)
root = BeautifulSoup(rs.content, 'html.parser')
for a in root.select('div.rating.infinite_scroll > a'):
title = a.strong.get_text(strip=True)
url = urljoin(rs.url, a['href'])
print(title, url)
# Проклятый путь https://www.film.ru/articles/semeynaya-drama-s-tommi-ganom-v-ruke
# Унесенные призраками https://www.film.ru/articles/klassika-anime-unesennye-prizrakami
# Адаптация https://www.film.ru/articles/lukavoe-naglyadnoe-posobie-po-ekranizacii
# ...
# Первый мститель: Другая война https://www.film.ru/articles/so-schitom-ili-na-schite