gpt4 book ai didi

python - 扫描网站内容(快速)

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:53 24 4
gpt4 key购买 nike

我的数据库中有数千个网站,我想在所有网站中搜索特定字符串。最快的方法是什么?我认为我应该首先获取每个网站的内容 - 这就是我的做法:

import urllib2, re
string = "search string"
source = urllib2.urlopen("http://website1.com").read()
if re.search(word,source):
print "My search string: "+string

并搜索字符串。但这非常慢。我怎样才能在 python 中加速它?

最佳答案

我不认为您的问题出在程序上 - 事实上您正在为数千个站点执行 HTTP 请求。您可以研究涉及某种并行处理的不同解决方案,但无论您使解析代码的效率如何,您都将遇到当前实现中请求的瓶颈。

这是一个使用 Queuethreading 模块的基本示例。我建议阅读多处理与多线程的好处(例如@JonathanV 提到的帖子),但这有望对理解正在发生的事情有所帮助:

import Queue
import threading
import time
import urllib2

my_sites = [
'http://news.ycombinator.com',
'http://news.google.com',
'http://news.yahoo.com',
'http://www.cnn.com'
]

# Create a queue for our processing
queue = Queue.Queue()


class MyThread(threading.Thread):
"""Create a thread to make the url call."""

def __init__(self, queue):
super(MyThread, self).__init__()
self.queue = queue

def run(self):
while True:
# Grab a url from our queue and make the call.
my_site = self.queue.get()
url = urllib2.urlopen(my_site)

# Grab a little data to make sure it is working
print url.read(1024)

# Send the signal to indicate the task has completed
self.queue.task_done()


def main():

# This will create a 'pool' of threads to use in our calls
for _ in range(4):
t = MyThread(queue)

# A daemon thread runs but does not block our main function from exiting
t.setDaemon(True)

# Start the thread
t.start()

# Now go through our site list and add each url to the queue
for site in my_sites:
queue.put(site)

# join() ensures that we wait until our queue is empty before exiting
queue.join()

if __name__ == '__main__':
start = time.time()
main()
print 'Total Time: {0}'.format(time.time() - start)

特别是有关线程 的优秀资源,请参阅 Doug Hellmann 的帖子 here ,一篇 IBM 文章 here (这已成为我的一般线程设置,如上所示)和实际文档 here .

关于python - 扫描网站内容(快速),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351816/

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