【发布时间】:2022-01-26 17:08:12
【问题描述】:
这是我的代码的要点:
while (int(price) > targetPrice):
try:
details = requests.get(url, headers=headers).text
var1 = (int)(re.search('desired-string(\d+)', details).group(1))
var2 = (int)(re.search('desired-string(\d+)', details).group(1))
var3 = (int)(re.search('desired-string(\d+)', details).group(1))
except (AttributeError, ValueError):
print('Error')
基本上,我有一个循环不断地获取网页并抓取所需的数据片段。我遇到的问题是我需要这个循环尽可能快地运行。循环迭代一次平均需要 0.33 秒,我想尽可能地降低这个数字。我获取的信息时常更改,一旦发生更改,我需要立即获取。
我发现需要这么长时间的原因是由于我提出的要求。当我只需要大约 5 行在 HTML 中的同一位置时,就会出现很多 HTML。有没有办法让请求获取 HTML 的特定行并忽略我不需要的所有内容?
提取的 HTML 来自此页面:https://www.roblox.com/catalog/6803405665/Gucci-Dionysus-Bag
多线程并不是我真正追求的,因为目标是尝试让循环尽可能快地迭代。据我所知和测试,多线程只允许循环异步运行,但每次迭代仍会以 0.33 秒的速度运行。
如果有的话,我认为这是一个优化问题。任何援助将不胜感激。如果需要任何进一步的信息,请告诉我,我会提供。
【问题讨论】:
-
您可能希望使用
re.compile预编译模式以保存在每个循环中完成的操作。但是,您的代码发出了一个网络请求,这可能比其他任何东西都慢至少一个数量级,并且无法优化。 -
“很多”数据是多少?服务器决定发送什么,因此除非您正在处理一个允许您控制通过请求参数接收哪些特定 HTML 行的服务器,否则您无法选择作为响应的一部分发送的内容。我推测这是导致大部分速度下降的请求,但如果不分析您的代码,我无法确定。
-
我想“很多”数据是模糊的,我会编辑它并发布我获取的 HTML,以便做出个人判断。关于编译,我真的没有太多经验,如果数据经常变化,这仍然是一个选择吗?
-
好的。每次迭代单独提出请求需要多少时间?
-
平均时间大致相同,为 0.33 - 0.36 秒
标签: python optimization python-requests