Date Formatı - Selenium

Merhaba, veritabanına veri kaydediyorum, ancak tipi date olan kolonlar ‘0000-00-00’ şeklinde geliyor. Selenium ile çekiyorum veriyi, bu durumu nasıl çözebilirim. Bu alanı çektiğim koduda paylaşıyorum.

if "Test" in description_list:
            index_no = description_list.index("Test")
            try:
                first_registration = value_list[index_no]
            except:
                first_registration = 

Merhaba,

Sanırım paylaştığınız kodlar, sorunu anlamamız açısından pek yeterli değil.

Hangi veritabanına veri kaydediyorsunuz? Selenium ile çektiğiniz verinin yapısı nasıl?

Heidisql, mysql.
Screenshot_2

Test edebilmek için site linkini de paylaşabilir misiniz?

Tabi ama kod üzerinde değişiklikler yaptığım için sağlıklı çalışamayabilir sizde. Tek istediğim bu tarihi YYYY/AA/GG formatında kaydedebilmek :confused:

if control == "true":
        mySql_insert_query = "INSERT INTO CARSSS (brand_and_model,first_registration) VALUES (%s,%s)"
        val = (
            brand_and_model,first_registration)

Kontrol doğruysa bu şekilde veritabanına kaydediyorum, ama tipi datetime olmasına rağmen 0000\00\00 atıyor, sanırım dönüştürmek lazım ama yapamadım.

Test edebileceğimiz türden bir kod paylaşabilir misiniz?

Tabii.

from xml.etree.ElementTree import QName
import bs4
import urllib.request
import pandas as pd
from tkinter import E
import pymysql
import mysql.connector
import configparser
import re
import numpy as np
import time
import concurrent.futures
#import erequests
import lxml
from multiprocessing import Pool
#from multiprocessing import Process, Lock
from multiprocessing import Process
from datetime import datetime
from tqdm import tqdm #progress bar
from urllib.request import urlopen
from bs4 import BeautifulSoup
from datetime import datetime
from sqlalchemy import create_engine
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.firefox.options import Options

mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="",
    database="m_m"
)
mycursor = mydb.cursor()
sql = "SELECT ad_link FROM ad_l"
mycursor.execute(sql)
myresult = mycursor.fetchall()
all_links = myresult[0:]

len_all_links = len(all_links)
dataframe = pd.DataFrame(all_links, columns=['links'])

x = 0
y = 6

def fonksiyon (i):

#global x
#global y

#number = np.arange(x,y) 

#for i in tqdm(number):
    ad_link = dataframe.links[i]  #ad_link = dataframe["links"][i]
    print(ad_link)

    fireFoxOptions = Options()
    fireFoxOptions.binary_location = r'C:\Program Files\Firefox Developer Edition\firefox.exe'  # PC"ye Firefox Developer yüklenmelidir. 
    fireFoxOptions.add_argument("--headless") 
    #fireFoxOptions.add_argument("--window-size=1920,1080")
    #fireFoxOptions.add_argument('--start-maximized')
    fireFoxOptions.add_argument('--disable-gpu')
    fireFoxOptions.add_argument('--no-sandbox')
    
    driver = webdriver.Firefox(options=fireFoxOptions)

    sleep_time = 5

    driver.get(ad_link)
    time.sleep(sleep_time)
    ad_source = driver.page_source
    ad_soup = BeautifulSoup(ad_source, 'lxml') # html.parser

    mainresults = ad_soup.find_all('div', {'class': 'cBox cBox--content u-overflow-inherit '})

    try:
        brand_and_model = ad_soup.find("h1", {"class": ('h2 u-text-break-word')}).get_text().strip()
        print(brand_and_model)
        brand_and_model = brand_and_model[0]
        model _version = brand_and_model[1]
    
    except:
        brand_and_model = ' '

    time.sleep(3)

    c_data = pd.DataFrame({
        'brand_and_model': brand_and_model,
    },
        index=[0])

    df1.insert(0, "brand_and_model", brand_and_model)

    config = configparser.RawConfigParser()
    config.read(filenames='my.properties')
    # print(config.sections())

    scrap_db = pymysql.connect(host='localhost', user='root', password='', database='m_m', charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
    cursor = scrap_db.cursor()

    sql = """CREATE TABLE TEST(
        brand_and_model VARCHAR(32),
        first_registration VARCHAR(7),
        )"""

    #cursor.execute(sql)   #Save data to the table

    for row_count in range(0, df_last.shape[0]):
        chunk = df_last.iloc[row_count:row_count + 1, :].values.tolist()

        brand_and_model = ""
        first_registration = ""
  
        lenght_of_chunk = len(chunk[0]) 

        if "brand_and_model" in c_data:
            try:
                brand_and_model = chunk[0][0]
            except:
                brand_and_model = ""
        
        if "Erstzulassung" in description_list:
            index_no = description_list.index("Erstzulassung")
            try:
                first_registration = value_list[index_no]
            except:
                first_registration = ""
                
    if (brand_and_model == ' '):
        control = "false"
    else:
        control = "true"

    if control == "true":
        mySql_insert_query = "INSERT INTO TEST (brand_and_model,first_registration,) VALUES (%s)"
        val =                                  (brand_and_model,first_registration,)
        # cursor = scrap_db.cursor()
        cursor.execute(mySql_insert_query, val)
        scrap_db.commit()
        print(cursor.rowcount, "Record inserted successfully into *TEST* table")
    driver.close()

if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        i = list(range(x,y))
        executor.map(fonksiyon,i)
        
        first_registration 
        datetime.datetime.strptime(first_registration, '%m/%d/%y')

Konunun Selenium ile alakasi yok.

Suradaki brand_and_model ve first_registration degiskenlerinin turu ve degeri onemli, muhtemelen yanlis.

Bu arada yukaridaki kod ile bu kod arasinda fark var.

Veritabanını bu şekilde oluşturup, kaydediyorum.

sql = """CREATE TABLE CARS(
     brand_and_model VARCHAR(32),
     model_version VARCHAR(64),
     price FLOAT(32),
     tel_number VARCHAR(32),
     mileage VARCHAR(32),
     f_rn DATETIME(7),
     ad_link VARCHAR(256),
     download_date_time DATETIME(32)
     )"""

Örneğin buradaki download_time: 07/2028 şeklinde. Veritabanına 2028/07/00 şeklinde atması gerekir ama 0000/00/00 şeklinde geliyor.

phyton da nasıl yazılan iki parametrenin toplamını hesaplıyan bir fonsiyon yazabilirim?
bir tane denedim ama çıktı tı alamadım
örnek:
def a_plus_b(num1,num2):
return num1+num2
print(num1+num2)

a_plus_b(3,5)
yazdığımda çalışiyor fakat çıktı boş oluyor ne yapabilirim yardımcı olurmusunuz

def a_plus_b(num1, num2):
    return num1 + num2


print(a_plus_b(3, 5))
1 Beğeni

ewy hemen deniyorum

(en az 20 karakter olması lazımmış o yüzden)hchuohuchhwuhwhehıoewcııhehcqcııcıhcıcııj

Keşke bunu benim sorum altında değilde, farklı bir başlık altında yazsaydınız.

1 Beğeni

pardon da yeniyimde bilmiyodum

Burada first_registration yok ama sorun degil, TEST kullandigimizi varsayiyorum…

str mi?

Oyle mi?
Kullandiginiz MySQL verisyonunun text verileri DATETIME’a cevirirken bu sekilde davrandigini nerede okudunuz? Resmi dokumentasyonu ne diyor?

2028-07-00’in gecerli bir DATETIME oldugundan da emin degilim fakat MySQL ile veri dogrulugu birbirine yakin kavramlar degil.

Bu arada bunu test etmenin SELECT CAST(‘07/2008’ as DATETIME(7)) gibi kolay bir yolu olabilir. Her seferinde tablo yaratip row girmeye gerek yok…

Tarihin (veya baska herhangi bir verinin) hangi formatta kaydedilecegini secemezsiniz. Isterken hangi formatta alacaginizi secebilirsiniz sadece.

Veya YYYY/AA/GG’yi yazi olarak kaydedebilirsiniz. Hangi formatta kaydedilecegini yine secemezsiniz, fakat YYYY/AA/GG formatinda yazi olarak getirtmeniz kolay olur.

Ben heidisql’ den aldığım veriyi mysql’ e aktarıyorum ve date formatında gelmiyor. Bunun her sql platformunda yapılabileceğini düşünüyorum. Yanlış mıdır?

Nasıl yapabilirim bunu?

Heidi web arayuzu degil mi? O zaman heidi’den veri web sayfasi, yani yazi olarak geliyor.

MySQL’e aktarirken DATETIME’a cevirmek lazim. INSERT ... CAST('yazi' AS DATETIME) da olabilir, veya MySQL client kutuphanesinin destekledigi datetime gibi bir veri turuyle de olabilir. Client kutuphanesinin de kilavuzuna, orneklerine bakmaniz lazim.

Hemen her MySQL arayuzunde DATETIME kolonuna yazi eklemeye calismanin bir sekilde calisabilecegini soyleyebiliriz, dogrudur, fakat aradaki cevrimin tam olarak nasil olacagi cogunlukla arayuze kalmis durumda. Kullanilan dilde istenilen database type’inin bir analogu varsa (DATEdatetime.date gibi) onu kullanmak daha iyi olacaktir.

Database’de VARCHAR gibi bir yazi kolonu kullanarak.

Şu anda zaten VARCHAR olarka ama aktarınca doğru gelmiyor tarih. 2028/07 olarak geliyor olduğu gibi. Ben 2028/07/00 olsun istiyorum. Anlamadım mı acaba?