Как читать HTML и цикл для вставки в MySQL в режиме реального времени? - PullRequest
0 голосов
/ 11 декабря 2019

Я читаю HTML-таблицу и помещаю в MySQL с этим кодом

html = urllib.request.urlopen("http://xxx")
bt = BeautifulSoup(html,"lxml") 
alltable = bt.find_all('table')

def read_data(last_id):

    lst_df = pd.read_html(str(alltable))

    #Change list of daframe to one dataframe
    df = pd.concat(lst_df)


    l_id = last_id+1    
    res = df.loc[df.ID ==l_id]
    mycursor = mydb.cursor(buffered=True)

    if not res.empty:

        number = res['number'].item()
        user = res['User'].item()

        qt = check_user(user)

        if not number > qt:

            r = q - p

            sql = "UPDATE user SET p = %s WHERE user = %s"
            val = (r, user)
            mycursor.execute(sql, val)
            mydb.commit()

            print(mycursor.rowcount, "record(s) affected")

        #Insert Log
        sql = "INSERT INTO log (id, user, number, l_id) VALUES (%s, %s, %s, %s,)"
        val = [(None, user, number , l_id)]

        mycursor.executemany(sql, val)

        mydb.commit()

        print(mycursor.rowcount, "was inserted.") 

        mycursor.close()

Я использую цикл while для функции запуска с этим кодом.

while True:
    last_id = get_last_id_db()
    read_data(last_id)

Она вызывает функцию только один раз. Я обновляю HTML-таблицу, но MySQL не обновляется. Когда я обновляю таблицу, MySQL должен автоматически обновляться, потому что пока он все еще работает.

У меня нет проблем, когда я нажимаю кнопку запуска 1 раз. но я хочу автоматическую проверку HTML. Итак, я использую пока true

1 Ответ

1 голос
/ 11 декабря 2019
  1. Это должно быть внутри функции read_data(), поэтому вы выбираете последнее состояние сети, а не только один раз в начале

    html = urllib.request.urlopen("http://xxx")
    bt = BeautifulSoup(html,"lxml") 
    alltable = bt.find_all('table')
    
  2. Doвы всегда передаете один и тот же last_id на read_data()?

  3. (Настоятельно рекомендуется) В цикле должен быть какой-то механизм sleep(), позволяющий просто извлекать данные каждые несколькосекунды / минуты.

...