[PYTHON] Holen Sie sich das Site-Update-Datum ernst

(Update) Ich werde das, was ich gemacht habe, in eine Klasse einfügen. [Python] Aktualisierungsdatum von Nachrichtenartikeln aus HTML abrufen

Es ist schwierig, das Aktualisierungsdatum der Website zu ermitteln

Wenn Sie die Antwortheader untersuchen, wird möglicherweise das Datum der letzten Änderung für statische Sites angezeigt.

get_lastmodified.py


import requests
res = requests.head('https://www.kantei.go.jp')
print(res.headers['Last-Modified'])
Mon, 17 Feb 2020 08:27:02 GMT

(Vorheriger Artikel) [Python] Letzte Aktualisierung der Website abrufen

Dies funktioniert gut für einige Nachrichtenseiten und viele Websites im Zusammenhang mit der japanischen Regierung, die meisten Websites jedoch nicht.

KeyError: 'last-modified'

Dann scheint es zwei Hauptmethoden zu geben.

Richtlinie 1 URL anzeigen

Die URL kann Zeichenfolgen wie 2019/05/01 und 2019-05-01 enthalten. Dies zu extrahieren ist eine leistungsstarke und zuverlässige Methode.

Policy 2 Scraping

Hier werden Sie sich letztendlich verlassen.

Mit diesen kombinierten Techniken extrahieren wir automatisch das Site-Aktualisierungsdatum von der News-Site, die Sie normalerweise lesen. Das erworbene schöne Suppenobjekt heißt Suppe. Das erfasste Aktualisierungsdatum wird in den Datums- / Uhrzeittyp konvertiert. Reguläre Ausdrücke werden zum Extrahieren und Formatieren von Zeichenfolgen verwendet.

get_lastmodified.py


import bs4
import datetime
import re

Die Nachrichtenseite, die ich gesucht habe

CNN Bloomberg BBC Reuter Wall Street Journal Forbes Japan Newsweek Asahi Shimbun Nikkei Shimbun Sankei Shimbun Yomiuri Shimbun Mainichi Shimbun

CNN

https://edition.cnn.com/2020/02/17/tech/jetman-dubai-trnd/index.html

get_lastmodified.py


print(soup.select('.update-time')[0].getText())
#Updated 2128 GMT (0528 HKT) February 17, 2020 

timestamp_temp_hm = re.search(r'Updated (\d{4}) GMT', str(soup.select('.update-time')[0].getText()))
timestamp_temp_bdy = re.search(r'(January|February|March|April|May|June|July|August|September|October|November|December) (\d{1,2}), (\d{4})', str(soup.select('.update-time')[0].getText()))
print(timestamp_temp_hm.groups())
print(timestamp_temp_bdy.groups())
#('2128',)
#('February', '17', '2020')
timestamp_tmp = timestamp_temp_bdy.groups()[2]+timestamp_temp_bdy.groups()[1]+timestamp_temp_bdy.groups()[0]+timestamp_temp_hm.groups()[0]
news_timestamp = datetime.datetime.strptime(timestamp_tmp, "%Y%d%B%H%M")
print(news_timestamp)
#2020-02-17 21:28:00


#Wenn es nur das Datum ist, können Sie es von der URL erhalten
URL = "https://edition.cnn.com/2020/02/17/tech/jetman-dubai-trnd/index.html"
news_timestamp = re.search(r'\d{4}/\d{1,2}/\d{1,2}', URL)
print(news_timestamp.group())
#2020/02/17
news_timestamp = datetime.datetime.strptime(news_timestamp.group(), "%Y/%m/%d")
print(news_timestamp)
#2020-02-17 00:00:00

Kommentar: Es wurde nicht überprüft, ob die Zeichenfolge "Aktualisiert" immer enthalten ist. CNN-Artikel haben das Datum in der URL mit Ausnahme der Zusammenfassungsseite, daher ist es sicher, dass dies übernommen wird

Bloomberg

https://www.bloomberg.co.jp/news/articles/2020-02-17/Q5V6BO6JIJV101

get_lastmodified.py


print(soup.select('time')[0].string)
# #
# #18. Februar 2020 7:05 JST
# #
timesamp_tmp = re.sub(' ','',str(soup.select('time')[0].string))
timesamp_tmp = re.sub('\n','',timesamp_tmp)
news_timestamp = datetime.datetime.strptime(timesamp_tmp, "%Y Jahr%m Monat%d Tag%H:%MJST")
print(news_timestamp)
#2020-02-18 07:05:00

#Sie können auch mit der URL auf den neuesten Stand kommen
URL = "https://www.bloomberg.co.jp/news/articles/2020-02-17/Q5V6BO6JIJV101"
timestamp_tmp = re.search(r'\d{4}-\d{1,2}-\d{1,2}', URL)
print(news_timestamp_tmp.group())
#2020-02-17
news_timestamp = datetime.datetime.strptime(timestamp_tmp, "%Y-%m-%d")
print(news_timestamp)
#2020-02-17 00:00:00

Kommentar: Das Tag enthält Zeilenumbrüche und Leerzeichen, daher ist viel Arbeit erforderlich.

BBC https://www.bbc.com/news/world-asia-china-51540981

get_lastmodified.py


print(soup.select("div.date.date--v2")[0].string)
#18 February 2020
news_timestamp = datetime.datetime.strptime(soup.select("div.date.date--v2")[0].string, "%d %B %Y")
print(news_timestamp)
#2020-02-18 00:00:00

Kommentar: Ich wusste nicht, wo ich nach der detaillierten Zeit suchen sollte.

Reuter

https://jp.reuters.com/article/apple-idJPKBN20C0GP

get_lastmodified.py


print(soup.select(".ArticleHeader_date")[0].string)
#February 18, 2020 /  6:11 AM /vor einer Stunde aktualisiert

m1 = re.match(r'(January|February|March|April|May|June|July|August|September|October|November|December) \d{1,2}, \d{4}',str(soup.select(".ArticleHeader_date")[0].string))
print(m1.group())
#February 18, 2020

m2 = re.search(r'\d{1,2}:\d{1,2}',str(soup.select(".ArticleHeader_date")[0].string))
print(m2.group())
#6:11

news_timestamp = datetime.datetime.strptime(m1.group()+' '+m2.group(), "%B %d, %Y %H:%M")
print(news_timestamp)
#2020-02-18 00:00:00

Wall Street Journal https://www.wsj.com/articles/solar-power-is-beginning-to-eclipse-fossil-fuels-11581964338

get_lastmodified.py


print(soup.select(".timestamp.article__timestamp")[0].string)
#
#          Feb. 17, 2020 1:32 pm ET
#

news_timestamp = re.sub(' ','',str(soup.select(".timestamp.article__timestamp")[0].string))
news_timestamp = re.sub('\n','',m)
print(news_timestamp)
#Feb.17,20201:32pmET
news_timestamp = re.match(r'(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec).(\d{1,2}),(\d{4})(\d{1,2}):(\d{1,2})',str(news_timestamp))
print(news_timestamp.groups())
#('Feb', '17', '2020', '1', '32')
tmp = news_timestamp.groups()
timesamp_tmp = tmp[0]+' '+ tmp[1].zfill(2)+' '+tmp[2]+' '+tmp[3].zfill(2)+' '+tmp[4].zfill(2)
print(timesamp_tmp)
#Feb 17 2020 01 32
news_timestamp = datetime.datetime.strptime(timesamp_tmp, "%b %d %Y %H %M")
print(news_timestamp)
#2020-02-17 01:32:00

Forbes Japan https://forbesjapan.com/articles/detail/32418

get_lastmodified.py


print(soup.select("time")[0].string)
#2020/02/18 12:00
news_timestamp = datetime.datetime.strptime(soup.select("time")[0].string, "%Y/%m/%d %H:%M")
print(news_timestamp)
#2020-02-18 12:00:00

Newsweek https://www.newsweek.com/fears-rise-over-coronavirus-american-cruise-passenger-diagnosed-after-previously-showing-no-1487668

get_lastmodified.py


print(soup.select('time')[0].string)
# On 2/17/20 at 12:11 PM EST
m = re.search(r'(\d{1,2})/(\d{1,2})/(\d{1,2}) at (\d{1,2}:\d{1,2}) ', str(soup.select('time')[0].string))
print(m.groups())
#('2', '17', '20', '12:11')
tmp = m.groups()
timesamp_tmp = tmp[0].zfill(2)+' '+ tmp[1].zfill(2)+' '+'20'+tmp[2].zfill(2)+' '+tmp[3]
print(timesamp_tmp)
news_timestamp = datetime.datetime.strptime(timesamp_tmp, "%m %d %Y %H:%M")
print(news_timestamp)
#2020-02-17 12:11:00

Asahi Shimbun

https://www.asahi.com/articles/ASN2K7FQKN2KUHNB00R.html

get_lastmodified.py


print(soup.select('time')[0].string)
#18. Februar 2020 12:25
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y Jahr%m Monat%d Tag%Uhr%M Minuten")
print(news_timestamp)
#2020-02-18 12:25:00

Kommentar: Statisch und leicht zu verstehen. Auf den ersten Blick gibt es auch nach Kategorien keine Schwankungen, was hilfreich ist.

Nikkei Shimbun

https://r.nikkei.com/article/DGXMZO5556760013022020TL1000

get_lastmodified.py


print(soup.select('time')[1])
#18. Februar 2020 11:00
news_timestamp = datetime.datetime.strptime(soup.select('time')[1].string, "%Y Jahr%m Monat%d Tag%H:%M")
print(news_timestamp)
#2020-02-18 11:00:00

https://www.nikkei.com/article/DGXLASFL18H2S_Y0A210C2000000

get_lastmodified.py


print(soup.select('.cmnc-publish')[0].string)
#2020/2/18 7:37
news_timestamp = datetime.datetime.strptime(soup.select('.cmnc-publish')[0].string, "%Y/%m/%d %H:%M")
print(news_timestamp)
#2020-02-18 07:37:00

https://www.nikkei.com/article/DGXKZO55678940V10C20A2MM8000

get_lastmodified.py


print(soup.select('.cmnc-publish')[0].string)
#2020/2/Mit 15
news_timestamp = datetime.datetime.strptime(soup.select('.cmnc-publish')[0].string, "%Y/%m/%Mit d")
print(news_timestamp)
#2020-02-15 00:00:00

Kommentar: Es gibt verschiedene Möglichkeiten zu schreiben. Es waren drei auf einen Blick, aber es kann einen geben.

Sankei Shimbun

https://www.sankei.com/world/news/200218/wor2002180013-n1.html

get_lastmodified.py


print(soup.select('#__r_publish_date__')[0].string)
#2020.2.18 13:10
news_timestamp = datetime.datetime.strptime(soup.select('#__r_publish_date__')[0].string, "%Y.%m.%d %H:%M")
print(news_timestamp)
#2020-02-18 13:10:00

Kommentar: Wenn Sie genau hinschauen, wurde es bis zu diesem Zeitpunkt in der URL aufgeführt.

Yomiuri Shimbun

https://www.yomiuri.co.jp/national/20200218-OYT1T50158/

get_lastmodified.py


print(soup.select('time')[0].string)
#2020/02/18 14:16
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y/%m/%d %H:%M")
print(news_timestamp)
#2020-02-18 14:16:00

Kommentar: Sie können das Datum nur über die URL abrufen.

Mainichi Shimbun

https://mainichi.jp/articles/20180803/ddm/007/030/030000c

get_lastmodified.py


print(soup.select('time')[0].string)
#3. August 2018 Tokio Morgenausgabe
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y Jahr%m Monat%d Tag Tokio Morgenausgabe")
print(news_timestamp)
#2018-08-03 00:00:00

https://mainichi.jp/articles/20200218/dde/012/030/033000c

get_lastmodified.py


print(soup.select('time')[0].string)
#18. Februar 2020 Tokio Abendausgabe
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y Jahr%m Monat%Tag d Tokio Abendausgabe")
print(news_timestamp)
#2020-02-18 00:00:00

https://mainichi.jp/articles/20200218/k00/00m/010/047000c

get_lastmodified.py


print(soup.select('time')[0].string)
#18. Februar 2020 09:57
#Zuletzt aktualisierter Druck(soup.select('time')[1].string)
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y Jahr%m Monat%d Tag%Uhr%M Minuten")
print(news_timestamp)
#2020-02-18 09:57:00

https://mainichi.jp/premier/politics/articles/20200217/pol/00m/010/005000c

get_lastmodified.py


print(soup.select('time')[0].string)
#18. Februar 2020
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y Jahr%m Monat%d Tag")
print(news_timestamp)
#2020-02-18 00:00:00

Kommentar: Im Mainichi Shimbun sind Artikel nur in elektronischer Form in wenigen Minuten erhältlich. Artikel aus der Morgen- und Abendausgabe sowie der täglichen Premiere können nur bis zum Datum bezogen werden, das mit der URL übereinstimmt.

Tabelle

Nachrichtenseite Aus dem R-Header Von der URL Aus dem Inhalt von HTML
CNN Datum Jahr, Monat, Tag, Stunde und Minute
Bloomberg Datum Jahr, Monat, Tag, Stunde und Minute
BBC Datum
Reuter Jahr, Monat, Tag, Stunde und Minute
Wall Street Journal Jahr, Monat, Tag, Stunde und Minute
Forbes Japan Jahr, Monat, Tag, Stunde und Minute
Newsweek Jahr, Monat, Tag, Stunde und Minute
Asahi Shimbun Jahr, Monat, Tag, Stunde und Minute Jahr, Monat, Tag, Stunde und Minute
Nikkei Shimbun Jahr, Monat, Tag, Stunde und Minute
Sankei Shimbun Jahr, Monat, Tag, Stunde und Minute Datum (und Uhrzeit Jahr, Monat, Tag, Stunde und Minute
Yomiuri Shimbun Datum Datum時分
Mainichi Shimbun Datum Datum時分*

Was ich dachte

Ganz zu schweigen von der Sprache, die Datumsangabe variiert von Standort zu Standort. Selbst innerhalb derselben Nachrichtenseite gibt es Schwankungen in der Notation, und wir konnten nicht alle bestätigen. Ich habe keine Site gefunden, die ich nicht durch Betrachten des HTML-Codes erhalten kann, aber ich kann sie durch Betrachten der URL sehen. Ich sagte, es sei eine passende Technik, aber sie ändert sich nicht, selbst wenn man sie nur durch Schaben bekommt. Bei dieser Methode müssen Sie die Tags und Klassennamen für jede Site lesen, und es scheint ziemlich schwierig zu sein, mit allen Sites umzugehen, auch mit Nachrichtenseiten. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt.

(Update) Ich werde das, was ich gemacht habe, in eine Klasse einfügen. [Python] Aktualisierungsdatum von Nachrichtenartikeln aus HTML abrufen

Recommended Posts

Holen Sie sich das Site-Update-Datum ernst
Rufen Sie das Aktualisierungsdatum der Python-Memorandum-Datei ab.
[Python] Ruft das Aktualisierungsdatum eines Nachrichtenartikels aus HTML ab
[Python] Ruft das Datum der letzten Aktualisierung der Website ab
[Python3] Ermittelt die Datumsdifferenz
Holen Sie sich Datum in Python
Holen Sie sich ein Date mit Python
[Python] Teilen Sie das Datum
Holen Sie sich den MIME-Typ
Skript zum Abrufen des Ablaufdatums des SSL-Zertifikats
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
[Linux] Aktualisieren Sie das Paket offline
Holen Sie sich die Anzahl der Ziffern
[Python] Holen Sie sich den Vormonat
Maya | Ruft den Arbeitsbereichspfad ab
Was tun, wenn "Ich kann die Site nicht sehen !!!!"
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python