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
  • Вопрос задан
  • 174 просмотра
Решения вопроса 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
Учусь программировать
А самому добавить год? И как будет виглядеть дата для прошлого года тогда?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
EQWILE Казань
от 80 000 до 110 000 ₽
AGIMA Москва
от 180 000 ₽
Level Travel Москва
До 160 000 ₽
28 февр. 2020, в 08:00
3000 руб./за проект
27 февр. 2020, в 23:16
1500 руб./за проект