gpt4 book ai didi

C++ 或 Python : Bruteforcing to find text in many webpages

转载 作者:太空狗 更新时间:2023-10-29 23:42:08 27 4
gpt4 key购买 nike

假设我想暴力破解网页:

例如,http://www.example.com/index.php?id= <1 - 99999>并搜索每个页面以查找是否包含特定文本。如果页面包含文本,则将其存储到字符串中

我有点让它在 python 中工作,但它很慢(每页大约 1-2 秒,这将需要大约 24 小时才能完成)是否有更好的解决方案?我正在考虑使用 C/C++,因为我听说 python 效率不高。不过转念一想,我觉得可能不是python的效率,而是访问html元素的效率(我把整个html改成文本,然后搜索一下。。。内容挺长的)

那么如何提高暴力破解的速度呢?

最佳答案

您的问题很可能与您快速解析 HTML 的能力无关,而与页面检索延迟和顺序任务阻塞有关。

1-2 秒是检索页面的合理时间。您应该能够更快地在页面上找到文本数量级。但是,如果您一次处理一个页面,那么您可能会在查找结果时等待 Web 服务器的响应而受阻。您可以改为通过工作进程一次检索多个页面,然后只等待它们的输出。

以下代码已从 Python's multiprocessing docs 修改而来更贴近您的问题。

import urllib
from multiprocessing import Process, Queue

def worker(input, output):
for func, args in iter(input.get, 'STOP'):
result = func(*args)
output.put(result)

def find_on_page(num):
uri = 'http://www.example.com/index.php?id=%d' % num
f = urllib.urlopen(uri)
data = f.read()
f.close()
index = data.find('datahere:') # obviously use your own methods
if index < 0:
return None
else:
return data[index:index+20]

def main():
NUM_PROCESSES = 4
tasks = [(find_on_page, (i,)) for i in range(99999)]
task_queue = Queue()
done_queue = Queue()
for task in tasks:
task_queue.put(task)
for i in range(NUM_PROCESSES):
Process(target=worker, args=(task_queue, done_queue)).start()
for i in range(99999):
print done_queue.get()
for i in range(NUM_PROCESSES):
task_queue.put('STOP')

if __name__ == "__main__":
main()

关于C++ 或 Python : Bruteforcing to find text in many webpages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com