(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
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.
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.
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
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
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.
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.
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.
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.
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.
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時分* |
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