缓存爬网结果以减少Python中的请求数

2024-10-03 15:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,从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))

Tags: 文件用户fromimport脚本comjson代理