Я пишу скрипт, который берет пользовательские агенты из whatismybrowser.com
и возвращает случайный пользовательский агент.
Поскольку пользовательские агенты редко меняются, и поскольку я хочу уменьшить количество запросов, я подумал, что могу кэшировать пользовательские агенты и обновлять их только один раз в неделю.
В настоящее время я делаю это, выгружая все пользовательские агенты в JSON-файл, который затем загружаю в память при запуске сценария. Это работает как надо, но я чувствую, что есть более эффективный, питонный способ сделать это.
Упрощенная версия кода без обработки ошибок:
from datetime import datetime
import os
import requests
from bs4 import BeautifulSoup
import json
import random
if (datetime.now() - datetime.fromtimestamp(os.path.getmtime("user_agents.json"))).days >= 7:
r = requests.get("https://developers.whatismybrowser.com/useragents/explore/software_name/chrome/")
html = r.text
soup = BeautifulSoup(html, 'lxml')
rows = soup.find_all("tr")
user_agents = [row.find("a").text for row in rows[1:11]]
with open("user_agents.json", "w") as f:
json.dump(user_agents, f, indent=4)
else:
with open("user_agents.json", "r") as f:
user_agents = json.load(f)
print(random.choice(user_agents))