缓存抓取结果以减少Python中的请求数量

时间:2019-06-22 18:06:33

标签: python caching python-requests

我正在编写一个脚本,该脚本从whatismybrowser.com获取用户代理并返回一个随机的用户代理。

由于用户代理很少更改,并且由于我想减少请求数量,因此我认为我可以缓存用户代理,并且每周仅更新一次。

我目前正在通过将所有用户代理转储到JSON文件中的方式来执行此操作,然后在运行脚本时将其加载到内存中。这可以正常工作,但我觉得有一种更有效的Pythonic方法可以做到这一点。

简化的代码版本,没有任何错误处理:

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))

0 个答案:

没有答案