(Update) Ich werde das, was ich gemacht habe, in eine Klasse einfügen. [Python] Aktualisierungsdatum von Nachrichtenartikeln aus HTML abrufen
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.
Die URL kann Zeichenfolgen wie 2019/05/01 und 2019-05-01 enthalten. Dies zu extrahieren ist eine leistungsstarke und zuverlässige Methode.
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
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
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.
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.
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.
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.
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.
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時分* |
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