Веб-очистить конкретные данные из проекта IMDB - PullRequest
0 голосов
/ 25 сентября 2019

Итак, я хочу извлечь оценки фильмов из imdb со счетом 8,7 и выше.

Я сделал это вот так вот, но я не знаю, что делать дальше

import re
import requests
from bs4 import BeautifulSoup
l = list()
r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = BeautifulSoup(r.text,'html.parser')
res = soup.find_all('strong')
for x in res:
    q = re.sub(r'\s+',' ',x.text)
    print(q)

это дает мне все оценки.я просто хочу 8,7 и выше.и спасибо за ответ!

Ответы [ 3 ]

0 голосов
/ 25 сентября 2019

Хорошо, прежде всего, так:

Представленные данные не соответствуют друг другу. Есть два значения 200 и 206, которые действительно превышают рейтинг 8,7, но я думаю, что они не соответствуют всей модели рейтинга изОт 0 до 10.

Я отредактировал код, так что в настоящее время он печатает значения рейтинга.Обратите внимание на выражение:

if my_float >= 8.7 and my_float <= 10:

Это выражение не только гарантирует, что Вы получите баллы, равные или превышающие 8,7, но также они не могут быть равными или превышающими максимальный рейтинг, равный 10.

import re
import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = BeautifulSoup(r.text,'html.parser')
res = soup.find_all('strong')
for x in res:
    q = re.sub(r'\s+',' ',x.text)
    try:
        my_float = float(q)
        if my_float >= 8.7 and my_float <= 10:
            print(q)
    except ValueError as error:
        print(error)

Надеюсь, это поможет.Если вы хотите сделать что-то еще с данными, а не распечатывать их, обязательно проверьте понимание списка или используйте другой блок кода, указанный ниже

(я заметил, что вы создали пустой список l = list())

import re
import requests
from bs4 import BeautifulSoup

l = list()
r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = BeautifulSoup(r.text,'html.parser')
res = soup.find_all('strong')
for x in res:
    q = re.sub(r'\s+',' ',x.text)
    try:
        my_float = float(q)
        if my_float >= 8.7 and my_float <= 10:
            l.append(my_float)
            print(q)
    except ValueError as error:
        print(error)
0 голосов
/ 25 сентября 2019

Просто извлеките рейтинг, преобразованный в число с плавающей запятой и сделайте сравнение

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = bs(r.content, 'lxml')

for tr in soup.select('.lister-list tr'):
    rating = float(tr.select_one('.imdbRating').text)
    if rating >= 8.7:
        print(tr.select_one('.titleColumn a').text.strip(), rating )

Менее читаемое понимание списка:

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = bs(r.content, 'lxml')
results = [(tr.select_one('.titleColumn a').text.strip(), float(tr.select_one('.imdbRating').text))  for tr in soup.select('.lister-list tr') if float(tr.select_one('.imdbRating').text) >= 8.7]
print(results)
0 голосов
/ 25 сентября 2019

Следующий код показывает, как вы можете создать список фильмов, рейтинг которых больше или равен 8,7.

import re
import requests
from bs4 import BeautifulSoup
l = list()
r = requests.get('https://www.imdb.com/chart/top?ref_=nv_mv_250')
soup = BeautifulSoup(r.text,'html.parser')
s = soup.find_all("tbody", class_="lister-list")
desired_list = []
for movie in s[0].findChildren("tr" , recursive=False):
    title = movie.find_all("a")
    rating = movie.find_all("strong")
    q = re.sub(r'\s+',' ',rating[0].text)
        try:
            rating = float(q)
            if rating >= 8.7:
                desired_list.append((rating, title[1].contents[0]))
        except Exception as e:
            print e
print desired_list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...