Использование Python и BeautifulSoup для очистки списка от URL - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в BeautifulSoup, поэтому прошу прощения за любые ошибки новичка. Я пытаюсь очистить URL-адрес и хочу сохранить список фильмов под одной датой. Ниже приведен код, который у меня есть на данный момент:

import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.imdb.com/calendar?region=IN&ref_=rlm")
soup = BeautifulSoup(page.content, 'html.parser')
date = soup.find_all("h4")
ul = soup.find_all("ul")
for h4,h1 in zip(date,ul):
    dd_=h4.get_text()
    mv=ul.find_all('a')
    for movie in mv:
        text=movie.get_text()
        print (dd_,text)
        movielist.append((dd_,text))

Я получаю "AttributeError: объект ResultSet не имеет атрибута find_all". Вы, вероятно, обрабатываете список элементов как один элемент. Вы звонили find_all (), когда вы хотели вызвать find ()? "

Ожидаемый результат в списке или фрейме данных

29th May 2020 Romantic
29th May 2020 Sohreyan Da Pind Aa Gaya
5th June 2020 Lakshmi Bomb
and so on

Заранее благодарим за помощь.

Ответы [ 3 ]

0 голосов
/ 29 мая 2020

Я не указал список для получения, и я изменил его с «h1» на «text capture» вместо «h4».

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.imdb.com/calendar?region=IN&ref_=rlm")
soup = BeautifulSoup(page.content, 'html.parser')

movielist = []
date = soup.find_all("h4")
ul = soup.find_all("ui")
for h4,h1 in zip(date,ul):
    dd_=h4.get_text()
    mv=h1.find_all('a')
    for movie in mv:
        text=movie.get_text()
        print (dd_,text)
        movielist.append((dd_,text))

Причина, по которой дата не совпадает в в результате полученная «дата» выглядит следующим образом, поэтому вам необходимо исправить logi c. Есть несколько названий с одной и той же датой выпуска, поэтому дата выпуска и количество названий не совпадают. Я не могу вам так сильно помочь, потому что у меня нет времени. Спокойной ночи.

29 May 2020
05 June 2020
07 June 2020
07 June 2020 Romantic
12 June 2020
12 June 2020 Sohreyan Da Pind Aa Gaya
18 June 2020
18 June 2020 Laxmmi Bomb
19 June 2020
19 June 2020 Roohi Afzana
25 June 2020
25 June 2020 Nikamma
26 June 2020
26 June 2020 Naandhi
02 July 2020
02 July 2020 Mandela
03 July 2020
03 July 2020 Medium Spicy
10 July 2020
10 July 2020 Out of the Blue
0 голосов
/ 29 мая 2020

Этот скрипт получит все фильмы и соответствующие даты в фрейм данных:

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://www.imdb.com/calendar?region=IN&ref_=rlm'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

out, last = [], ''
for tag in soup.select('#main h4, #main li'):
    if tag.name == 'h4':
        last = tag.get_text(strip=True)
    else:
        out.append({'Date':last, 'Movie':tag.get_text(strip=True).rsplit('(', maxsplit=1)[0]})

df = pd.DataFrame(out)
print(df)

Печать:

             Date                          Movie
0     29 May 2020                       Romantic
1     29 May 2020       Sohreyan Da Pind Aa Gaya
2    05 June 2020                    Laxmmi Bomb
3    05 June 2020                   Roohi Afzana
4    05 June 2020                        Nikamma
..            ...                            ...
95  26 March 2021       Untitled Luv Ranjan Film
96  02 April 2021                             F9
97  02 April 2021                    Bell Bottom
98  02 April 2021  NTR Trivikiram Untitled Movie
99  09 April 2021                 Manje Bistre 3

[100 rows x 2 columns]
0 голосов
/ 29 мая 2020

Я думаю, вам следует заменить «ul» на «h1» в 10-й строке. И впереди добавьте определение переменной "movielist".

import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.imdb.com/calendar?region=IN&ref_=rlm")
soup = BeautifulSoup(page.content, 'html.parser')
date = soup.find_all("h4")
ul = soup.find_all("ul")
# add code here
movielist = []
for h4,h1 in zip(date,ul):
    dd_=h4.get_text()
    # replace ul with h1 here
    mv=h1.find_all('a')
    for movie in mv:
        text=movie.get_text()
        print (dd_,text)
        movielist.append((dd_,text))
print(movielist)
...