Python Новичок, учи как placeholders использовать, они же prepared statements.
cursor.execute('SELECT * FROM table WHERE x = ? AND y = ?', (x_value, y_value))
EgorSvinarev, ну если придираться, то "часто" и "внезапно" - не одно и то же. =) Если сайт обновляется редко, но нерегулярно, а ты хочешь гарантированно иметь актуальную информацию (что важно при планировании поездок), то выполнять запрос немедленно практичнее до тех пор, пока этих запросов не очень много.
Это имеет смысл, если запросы идут чаще, чем хотя бы раз в пять минут.
Если бот "для себя", а информация в источнике может меняться внезапно, то подход "парсить по запросу" может иметь смысл.
Если нет, то нужны детали.
Что за библиотеку для работы с ВК планируешь использовать? Асинхронную или синхронную? От этого зависит организация бота - простой асинхронный, или синхронный с потоками. (Если термины незнакомы, тебе нужно подучиться, прежде чем браться за ботов.)
Сколько человек будут пользоваться ботом и насколько часто? Насколько часто меняется это расписание? От этого зависит оправданность парсинга по каждому запросу пользователя.
Что за сайт? Отдаёт ли он нужный контент статически, или генерирует/подгружает его через JavaScript? Если первое, то достаточно библиотеки для выполнения HTTP запросов. Для синхронного бота подойдёт requests, для асинхронного - aiohttp. Обе сторонние, ставятся через pip. Не забудь про имитацию запроса обычным пользователем - куки, заголовки Referer и User-Agent.
Используй beautifulsoup, чтобы выдернуть нужную инфу из HTML разметки, хотя в простых случаях и регулярные выражения подойдут.
Если сайт увешан скриптами, нужно анализировать сайт и выяснять, какой фоновый запрос отдаёт нужные данные. Если повезёт, и сайт отдаёт данные в json, то подойдёт одноименный стандартный модуль.
Если же не повезёт, и сайт слишком сложен, или сайт защищается от ботов, придётся использовать selenium для его открытия в обычном (но программно управляемом) браузере. Это куда более тяжеловесный процесс, но и куда более сложный для обнаружения.
И да, ты hello_words всё ещё не починил. Ты используешь синтаксис как у f-строки, но в списке у тебя обычные строки, а не f-строки. Если используешь commands, то префикс там вообще не нужен.
Python Новичок, ну простейшие вещи selenium за тебя сделает - куки примет, заголовки типа User-Agent правильные отправит. Но фз чего там гугл наворотил - таких ботов-спамеров на ютубе уже полно. Так что не следует ожидать, что всё прямо сходу заработает, и что учётку через месяц не забанят.
сергей кузьмин, я подозреваю, что InstallAllUsers=0.
Если питон ставится в профиль пользователя, то путь придётся определять по переменным окружения. Впрочем, это всё равно должно быть выполнимо.
Нам нужно найти проекцию анализируемой точки (x0; y0) на отрезок (x1;y1)-(x2;y2) маршрута. Тогда мы сможем понять, лежит ли эта проекция на отрезке. Если лежит, то расстояние от точки до проекции - это расстояние от точки до отрезка. Если не лежит, то расстояние от точки до отрезка - это расстояние от точки до ближайшего конца отрезка. В целом алгоритм примерно таков:
1. Выбираешь две соседние точки из маршрута.
2. Составляешь уравнение прямой. проходящей через эти точки. Обычно оно имеет вид (x - x1) / (x2 - x1) = (y - y1) / (y2 - y1), где две точки - (x1;y1) и (x2;y2).
Но лучше, если переведёшь его в каноническую форму вида Ax+By+C=0.
3. Из канонического уравнения можно узнать нормальный (перпендикулярный) вектор к прямой. Он будет иметь вид N = (A;B), где A и B - коэффициенты из уравнения выше.
4. У тебя получается уравнение прямой, перпендикулярной к нашему отрезку. Оно будет иметь вид (x - x0) / A = (y - y0) / B, где (x0;y0) - это точка, расстояние до которой мы хотим найти.
5. У нас два уравнения прямых. Точка пересечения (точка проекции) будет удовлетворять им обоим, так что надо решить систему.
Bx - Ay - B*x0 + A*y0 = 0
Ax + By + C=0
Система должна иметь одно решение (x;y).
6. Находишь t = (x - x1) / (x2 - x1) = (y - y1) / (y2 - y1) Какое из двух выбрать - зависит от направления прямой. Если прямая вертикальна (x2 - x1) ~= 0, то лучше взять y, и наоборот. t покажет, где на отрезке находится проекция искомой точки.
t = [0...1] - проекция на отрезке. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x;y).
t < 0 - проекция лежит до начала отрезка. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x1;y1).
t > 1 - проекция лежит за концом отрезка. Расстояние от точки до отрезка - это расстояние от (x0;y0) до (x2;y2).
Это полное описание, думаю, алгоритм можно упростить.
Кроме того, если длина отрезка (x1;y1)-(x2;y2) мала в сравнении с максимальным допустимым расстоянием до точки (x0;y0), то можно вообще ей пренебречь, и считать расстояние от точки до любого конца отрезка.
Uno di Palermo, ну не то чтобы вредно, но зачем? Если объект wikiart не пригоден к повторному использованию, то тогда да, его нужно создать заново. А если пригоден, то почему бы не использовать его для всех загрузок? Незачем делать лишнюю работу.
Ага, уже лучше. А ничего не работает - это как? Ошибка при установке? Успешная установка, но ошибка при импорте?
Успешный импорт, но ошибка при выполнении кода?
Приведи код (если есть) и текст ошибки.