R
R
r4khic2019-09-05 09:18:03
Python
r4khic, 2019-09-05 09:18:03

Content extraction with BeautifulSoup and Python?

Приветствую всех ! Парсю дату новостей с этого портала . Получаю дату в таком формате:"3 Сентября, 23:30 721".Мне нужно обрезать или как-то удалить лишний элемент 721.
Я для этого решил использовать функцию decompose()
Но загвоздка состоит в том что эти цифры 721 находятся внутри класса.
AGmIN.png
А как я понял из документации,функция decompose() удаляет только теги .Как можно с помощью функции decompose() удалить лишний тег span с своим классом?
Вот код который используется для парсинга даты:

тык
# < Собираем даты с страницы.
def get_item_datetime(item_page,datetime_rule,datetime1_rule):
    if item_page is None:
        return
    soup = BeautifulSoup(item_page, 'lxml')
    item_datetime = soup.find(datetime_rule[0],{datetime_rule[1]:datetime_rule[2]})
    if item_datetime is not None:
        item_datetime = soup.find(datetime_rule[0],{datetime_rule[1]:datetime_rule[2]})
        #item_datetime = dateparser.parse(item_datetime)
    else:
        if (len(datetime1_rule) == 3):
            item_datetime = soup.find(datetime1_rule[0],{datetime1_rule[1]:datetime1_rule[2]}).text
            #item_datetime = dateparser.parse(item_datetime)
        else:
            item_datetime = ''
    return item_datetime

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
Ivan Yakushenko, 2019-09-05
@r4khic

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

>>> soup.find('div', {'class': 'nl__details nl__details_left'}).span.text
'3 Сентября, 23:30'

Но я вам настоятельно рекомендую парсить нормальную дату, что-бы избежать любых возможных проблем.
Если и этот вариант вам по какой-то причине не нравится и вы и дальше будете пытаться парсить дату в том виде, в котором она сейчас, то вам нужны регулярные выражения. Т.к. насколько я понимаю на сайте несколько типов отображения дат, то и регулярное выражение должно покрывать их все.
Можете зайти на regex101, в поле TEST STRING закиньте примеры ваших дат, а в REGULAR EXPRESSION пишите регулярное выражение, результат будете получать сразу и наглядно видеть в правильном направлении идёте, или нет. Вот тут можно посмотреть синтаксис регулярных выражений, сильно сложного ничего нет.
Ну и совсем упоротый вариант, отвечающий конкретно на ваш вопрос:
>>> date = '3 Сентября, 23:30 721'
>>> date = ' '.join(date.split(' ')[:-1])
>>> date
'3 Сентября, 23:30'

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question