Python: Python kullanarak dinamik web'den günlük verileri nasıl alırsınız?
Aşağıdaki kod çalışıyor, ancak 29 Şubat'tan sonra duruyor. Web sitesi "geçersiz bir tarih girdiniz. Lütfen aramanızı yeniden girin" mesajı veriyor, bu da "Tamam" ı tıklamayı gerektiriyor. Bunu nasıl aşarım?
country_search("United States")
time.sleep(2)
date_select = Select(driver.find_element_by_name("dr"))
date_select.select_by_visible_text("Enter date range...") #All Dates
select_economic_news()
#btnModifySearch
for month in range(1,9):
for day in range(1,32):
try:
set_from_month(month)
set_from_date(day)
set_from_year("2020")
set_to_month(month)
set_to_date(day)
set_to_year("2020")
time.sleep(5)
#select_economic_news()
time.sleep(5)
search_now()
time.sleep(8)
export_csv()
modify_search()
time.sleep(5)
#country_remove()
except ElementClickInterceptedException:
break
çıkış Yap()
Yanıtlar
Yalnızca ilk gönderide belirtilen yöntemleri kullanabiliyorsanız, o zaman şöyle bir şey denerim:
set_from_year('2020')
set_to_year('2020')
for month in range(1, 9):
# 1 to 9 for Jan to Aug
month_str = '0' + str(month)
set_from_month(month_str)
set_to_month(month_str)
for day in range(1, 32):
# Assuming an error is thrown for invalid days
try:
# Store data as needed
except Exception as e:
# print(e) to learn from error if needed
pass
Bu yöntemleri kendi başınıza yazdığınız ve HTML üzerinden döngü yapıp günlük veriler için bir kalıp bulmanız gerektiği ortaya çıkarsa, bu konuya girecek daha çok şey var.
Bir aydaki gün sayısını dinamik olarak elde etmek istediğinize inanıyorum, böylece her tarih için veri almak üzere bu sayının üzerinden geçebilirsiniz. Bunu şu şekilde yapabilirsiniz:
from datetime import datetime
currentDay = datetime.today()
# You can set the currentDay using this if you want the data till the current date or
# whenever your scheduler runs the job.
# Now you need to get the number of days in each month from the chosen date, you can
# have the corresponding function like getStartMonth() in your program which will
# return the starting month.
from calendar import monthrange
daysPerMonth = {}
year = currentDay.year #TODO : change this to getStartYear()
startMonth = 3 # TODO : Implement getStartMonth() in your code.
for month in range(startMonth, currentDay.month+1):
# monthrange returns (weekday,number of days in that month)
daysPerMonth[month] = monthrange(year, month)[1]
for month in daysPerMonth.items():
print(month[0], '-',month[1])
Bu, şuna benzer bir sonuç verecektir ( Mart 2020'den Ağustos 2020'ye kadar bir aydaki gün sayısı ):
3 - 31
4 - 30
5 - 31
6 - 30
7 - 31
8 - 31
Ve sonra, elde ettiğiniz dikteden aralığa atıfta bulunurken gün sayısı için bir döngü çalıştırabilirsiniz. NOT: Her tarih için veri almak üzere döngüyü çalıştırdığınız işlevde, yılın son günü olup olmadığını kontrol etmek için bir if koşulu ekleyin ve yılı buna göre değiştirin.
Belki bu işlevi, ayın günlerini saymak için kullanabilirsiniz:
import datetime
def get_month_days_count(year: int, month: int) -> int:
date = datetime.datetime(year, month, 1)
while (date + datetime.timedelta(days=1)).month == month:
date = date + datetime.timedelta(days=1)
return date.day