[PYTHON] Obtenez la date de mise à jour du site au sérieux

(Mise à jour) Je vais mettre ce que j'ai fait dans une classe. [Python] Obtenez la date de mise à jour des articles d'actualité à partir de HTML

Il est difficile d'obtenir la date de mise à jour du site

L'examen des en-têtes de réponse peut révéler la dernière date de modification des sites statiques.

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

(Article précédent) [Python] Obtenir la dernière date de mise à jour du site Web

Cela fonctionne bien pour certains sites d'actualités et de nombreux sites liés au gouvernement japonais, mais la plupart des sites ne le font pas.

KeyError: 'last-modified'

Ensuite, il semble y avoir deux méthodes principales.

URL de vue de la stratégie 1

L'URL peut contenir des chaînes telles que 2019/05/01 et 2019-05-01. L'extraction est une méthode puissante et fiable.

Grattage de la règle 2

C'est là que vous vous ferez en fin de compte.

Ainsi, avec ces techniques combinées, nous extrairons automatiquement la date de mise à jour du site du site d'actualités que vous lisez habituellement. L'objet beautifulsoup acquis est appelé soupe. La date de mise à jour acquise est convertie en type datetime. Les expressions régulières sont utilisées pour l'extraction et la mise en forme de chaînes de caractères.

get_lastmodified.py


import bs4
import datetime
import re

Le site d'actualités que j'ai cherché

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


#Si ce n'est que la date, vous pouvez l'obtenir à partir de l'URL
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

Commentaire: Il n'a pas été vérifié si la chaîne de caractères "Mise à jour" est toujours incluse. Les articles CNN ont la date dans l'URL à l'exception de la page de résumé, il semble donc certain de prendre cela

Bloomberg

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

get_lastmodified.py


print(soup.select('time')[0].string)
# #
# #18 février 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 année%m mois%jour j%H:%MJST")
print(news_timestamp)
#2020-02-18 07:05:00

#Vous pouvez vous mettre à jour même avec l'URL
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

Commentaire: Il y a des sauts de ligne et des blancs dans la balise, donc cela demande beaucoup de travail.

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

Commentaire: Je ne savais pas où chercher l'heure détaillée.

Reuter

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

get_lastmodified.py


print(soup.select(".ArticleHeader_date")[0].string)
#February 18, 2020 /  6:11 AM /il y a une heure mis à jour

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 février 2020 12:25
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y année%m mois%jour j%H heure%M minutes")
print(news_timestamp)
#2020-02-18 12:25:00

Commentaire: statique et facile à comprendre. À première vue, il n'y a pas de fluctuation même par catégorie, ce qui est utile.

Nikkei Shimbun

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

get_lastmodified.py


print(soup.select('time')[1])
#18 février 2020 11:00
news_timestamp = datetime.datetime.strptime(soup.select('time')[1].string, "%Y année%m mois%jour j%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/Avec 15
news_timestamp = datetime.datetime.strptime(soup.select('.cmnc-publish')[0].string, "%Y/%m/%Avec d")
print(news_timestamp)
#2020-02-15 00:00:00

Commentaire: Il existe différentes manières d'écrire. Il y en avait trois en un coup d'œil, mais il y en a peut-être un.

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

Commentaire: Si vous regardez de près, il a été répertorié sur l'URL jusqu'à temps.

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

Commentaire: vous ne pouvez obtenir la date qu'à partir de l'URL.

Mainichi Shimbun

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

get_lastmodified.py


print(soup.select('time')[0].string)
#3 août 2018 Tokyo Morning Edition
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y année%m mois%Jour J Tokyo Morning Edition")
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 février 2020 Tokyo soirée édition
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y année%m mois%Day D Tokyo édition du soir")
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 février 2020 09:57
#Dernière impression mise à jour(soup.select('time')[1].string)
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y année%m mois%jour j%H heure%M minutes")
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 février 2020
news_timestamp = datetime.datetime.strptime(soup.select('time')[0].string, "%Y année%m mois%jour j")
print(news_timestamp)
#2020-02-18 00:00:00

Commentaire: Dans le Mainichi Shimbun, les articles uniquement en version électronique peuvent être obtenus en quelques minutes. Les articles des éditions du matin et du soir et de la première quotidienne ne peuvent être obtenus qu'à la date, qui est la même que l'URL.

table

Site d'actualités De l'en-tête R De l'URL À partir du contenu du HTML
CNN Date Année, mois, jour, heure et minute
Bloomberg Date Année, mois, jour, heure et minute
BBC Date
Reuter Année, mois, jour, heure et minute
Wall Street Journal Année, mois, jour, heure et minute
Forbes Japan Année, mois, jour, heure et minute
Newsweek Année, mois, jour, heure et minute
Asahi Shimbun Année, mois, jour, heure et minute Année, mois, jour, heure et minute
Nikkei Shimbun Année, mois, jour, heure et minute
Sankei Shimbun Année, mois, jour, heure et minute Date et l'heure Année, mois, jour, heure et minute
Yomiuri Shimbun Date Date時分
Mainichi Shimbun Date Date時分*

Ce que je pensais

Sans parler de la langue, la notation de la date varie d'un site à l'autre. Même au sein d'un même site d'information, il y a des fluctuations dans la notation, et nous n'avons pas été en mesure de les confirmer toutes. Je n'ai pas trouvé de site que je ne peux pas obtenir en regardant le HTML, mais je peux le voir en regardant l'URL. J'ai dit que c'était une technique de correspondance, mais cela ne change pas même si vous l'obtenez simplement en grattant. Avec cette méthode, vous devez lire les balises et les noms de classe de chaque site, et il semble assez difficile de traiter tous les sites, même les sites d'actualités. S'il vous plaît laissez-moi savoir s'il existe une meilleure façon.

(Mise à jour) Je vais mettre ce que j'ai fait dans une classe. [Python] Obtenez la date de mise à jour des articles d'actualité à partir de HTML

Recommended Posts

Obtenez la date de mise à jour du site au sérieux
Obtenez la date de mise à jour du fichier de mémorandum Python.
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
[Python] Obtenez la dernière date de mise à jour du site Web
[Python3] Obtenez la différence de date
Obtenir la date en Python
Obtenez date avec python
[Python] Fractionner la date
Obtenir le type MIME
Script pour obtenir la date d'expiration du certificat SSL
Obtenez la date et l'heure actuelles en Python, en tenant compte du décalage horaire
[Linux] Mettez à jour le package hors ligne
Obtenez le nombre de chiffres
[Python] Récupérez le mois précédent
Maya | Obtenir le chemin de l'espace de travail
Que faire lorsque vous obtenez "Je ne peux pas voir le site !!!!"
Obtenez le titre et la date de livraison de Yahoo! News en Python