r4khic
@r4khic
Начинающий кодер на python

Как спарсить дату сайта?

Всех приветствую.Парсю дату новостей с этого портала .И после эти полученные даты преобразовываю в нужный мне формат с помощью библиотеки dateparser .И произошла такая дилемма .У этого портала есть два типа дат. То есть вот так:1 тип даты 2 тип даты
И вот у 1-го типа дата такая 5d6f68e406903889304898.png
А у 2-го типа дата такая 5d6f690db3602916189272.png

2 тип дат парсится без проблем. А вот 1 тип выводит None т.к я использую библиотеку dateparser

Вот формат в который я преобразовываю с помощью библиотеки dateparser
2019-09-03 13:54:23


Я думаю 1 тип даты выводит None так как в библиотеке dateparser нужен год для преобразования в нужный мне формат.
Вот участок кода который парсит даты:
код
# < Собираем даты с страницы.
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]}).text
        item_datetime = dateparser.parse(item_datetime, date_formats=['%d %B %Y %H'])
    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, date_formats=['%d %B %Y %H'])
        else:
            item_datetime = ''
    return item_datetime

Как спарсить 1 тип даты ? И преобразовать в такой формат
2019-09-03 13:54:23
  • Вопрос задан
  • 164 просмотра
Решения вопроса 2
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
У обеих страниц есть метатег формата
<meta name="mediator_published_time" content="2019-09-02T22:51:00+0600">

Берите его парсите с dateutil
import requests

from lxml.html import fromstring
from dateutil import parser as dtparser

r = requests.get(url, headers=header)
html = fromstring(r.text)
dt_string = html.find('.//meta[@name="mediator_published_time"]').get('content')
dt_obj = dtparser.parse(dt_string)

>>> datetime.datetime(2019, 9, 2, 22, 51, tzinfo=tzoffset(None, 21600))
Ответ написан
@nvdfxx
Senior Pomidor developer
Можно написать функцию, которая перед отдачей в dateparser будет проверять строку, если в ней первый символ не цифра, то разбиваем эту строку на массив, берем первый элемент, и switch case'ом проверяем, если 'вчера', то берем текущую дату - 1 день, а время подставляем из 2 элемента массива, полученного из исходной строки, для 'сегодня' - аналогично, только без -1 день, после чего склеиваем и возвращаем строку для передачи в dateparser
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MAGistr_MTM
Учусь программировать
А самому добавить год? И как будет виглядеть дата для прошлого года тогда?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы