Кэшируйте результат сканирования, чтобы уменьшить количество запросов в Python - PullRequest
0 голосов
/ 22 июня 2019

Я пишу скрипт, который берет пользовательские агенты из 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...