I took the liberty of using requests_html instead of Beautifulsoup, but logic can be easily downloaded:
from requests_html import HTMLSession
from datetime import datetime
import re
url = "https://dumps.wikimedia.org/other/pageviews/2018/2018-04/"
session = HTMLSession()
r = session.get(url)
pre = r.html.find('pre', first=True)
data_inicial = datetime(2018, 4, 2)
data_final = datetime(2018, 4, 5)
for link in sorted(pre.links):
# Tentar isolar número entre dois hífens. Se não conseguir, não é um dos links que queremos
try:
date_str = re.search(r"-(\d+)-", link).group(1)
except AttributeError:
continue # Ir pra próxima iteração do for
# Transformamos o número entre dois hífens em objeto datetime
data_link = datetime.strptime(date_str, "%Y%m%d")
# Printamos o link completo somente se estiver entre as datas inicial e final
if data_inicial <= data_link <= data_final:
print(url + link)
If we were to include the time and list only pageview pages, we would have
from requests_html import HTMLSession
from datetime import datetime
import re
url = "https://dumps.wikimedia.org/other/pageviews/2018/2018-04/"
session = HTMLSession()
r = session.get(url)
pre = r.html.find('pre', first=True)
data_inicial = datetime(2018, 4, 2, 13, 0) # 02/04/2018, 13:00
data_final = datetime(2018, 4, 5, 9, 0) # 05/04/2018, 9:00
for link in sorted(pre.links):
# link não inclui a base da url; é algo como `projectviews-20180402-150000`
# Tentar isolar número entre dois hífens. Se não conseguir, não é um dos links que queremos
try:
date_str = re.search(r"-(\d+-\d+)", link).group(1)
# Regex = encontrar e capturar (parênteses) um ou mais dígitos (\d+) seguidos por hífen e mais um ou mais
# dígitos. Exemplo - em `pageviews-20180405-220000` é capturada a substring `20180405-220000` (padrão que
# está dentro do grupo de captura)
except AttributeError:
continue # Ir pra próxima iteração do for
# Transformamos o número entre dois hífens em objeto datetime com hora
data_link = datetime.strptime(date_str, "%Y%m%d-%H%M%S")
# Printamos o link completo somente se estiver entre as datas inicial e final e se contiver a string "pageviews".
if data_inicial <= data_link <= data_final and "pageviews" in link:
print(url + link)
from what I see, the lists are based on the month, you want a range of months is that it? To get every list of every month
– Miguel
In fact they are by date and time ...I need to pick up for a date and time a range I pass, for example between 2018-09-04 12:00 and 2018-09-04 12:59. @miguel put examples there in the question
– Laerte Junior
True, I’ll try to help. Are you using python3 right? But you put python 2.7 in the tags...
– Miguel
Poxa brigadao mesmo.. Yes I’m using 3.0, but this code will pruma lambda aws Function that I believe is only 2.7. I’m pretty new at this
– Laerte Junior
I just checked, lambda functions accept python 3.6 :)
– Laerte Junior