Создание веб-страниц с помощью BeautifulSoup

#python-3.x #web-scraping #nlp

#python-3.x #очистка веб-страниц #nlp

Вопрос:

я пытаюсь собрать некоторые данные для обучения, но я застрял.

Я хотел бы очистить дату, а не только год, но я не мог понять, как это сделать на данный момент.

Вот сегмент, который я хотел бы очистить :

htmlscrape

И вот мой сценарий до сих пор :

 import requests
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import re

url = "https://www.senscritique.com/films/tops/top111"

results = requests.get(url)

soup = BeautifulSoup(results.text, "html.parser")



titles = []
years = []
notes = []
synopsys = []
infos = []
dates = []

movie_div = soup.find_all('div', class_ = 'elto-flexible-column')

for container in movie_div:
    title = container.h2.a.text
    titles.append(title)


    year = container.h2.find('span', class_ = 'elco-date').text
    year = year.replace('(', '')
    year = year.replace(')', '')
    years.append(year)


    sy = container.find('p', class_ = 'elco-description').text
    synopsys.append(sy)


    note = float(container.div.a.text)
    notes.append(note)



    info = container.find('p', class_ = 'elco-baseline elco-options').text
    #type = re.sub(r'[a-z] ', '', type)
    
    infos.append(info)

    soup = container.find('p', class_ = 'elco-baseline elco-options')

    for i in soup:
        i = soup.find('time')

        dates.append(i)

print(dates[0])
  

И вот результаты :

Результат

Я бы хотел просто иметь «1957-04-10» или «10 аврил 1957», что угодно! Но я не могу понять это! Я перепробовал много вещей, но это лучшее, что у меня было до сих пор.

Спасибо 🙂

Ответ №1:

Вы можете использовать .text свойство <time> тега, чтобы получить время:

 import requests
from bs4 import BeautifulSoup


url = 'https://www.senscritique.com/films/tops/top111'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

for movie in soup.select('.elto-item'):
    title = movie.select_one('[id^="product-title"]').text
    time = movie.select_one('time')
    time = time.text if time else '-'
    print('{:<40} {}'.format(title, time))
  

С принтами:

 12 hommes en colère                      10 avril 1957
Harakiri                                 16 septembre 1962
Barberousse                              3 avril 1965
Le Bon, la Brute et le Truand            23 décembre 1966
Les Sept Samouraïs                       26 avril 1954
Il était une fois dans l'Ouest           21 décembre 1968
Il était une fois en Amérique            23 mai 1984
Le Parrain                               24 mars 1972
Le Trou                                  18 mars 1960
Dersou Ouzala                            2 août 1975
Point limite                             7 octobre 1964
Entre le ciel et l'enfer                 1 mars 1963

...and so on.
  

Комментарии:

1. Оооу, я использовал текст, но это не сработало. Наверное, я делал что-то не так. Спасибо за ответ, я попробую, как и вы 🙂

2. Спасибо, это работает! Я не знал select_one . Это приятно. Хорошего дня.

Ответ №2:

Я думаю, что что-то подобное сделало бы это за вас, просто вернув дату.

 tags = soup('time')
date_formatted = list()
for tag in tags:
    date_formatted.append((tag.contents[0])))
    print(date_formatted[0])