扫描网站内容(快速)

原学程将引见扫描网站实质(疾速)的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

扫描网站内容(快速) 教程 第1张

成绩描写

我在1个数据库中稀有千个网站,我想在一切网站中搜刮特定的字符串。做这件事最快的办法是甚么?我以为我应当先夺取每一个网站的实质--这便是我的做法:

import urllib二, re
string = "search string"
source = urllib二.urlopen("http://website一.com").read()
if re.search(word,source):
 print "My search string: "+string

并搜刮该字符串。但是这长短常迟缓的。我怎样在Python中加快它?

HTTPS

我以为您的成绩没有在于法式,而在于您正在为数以千计的站面履行推举谜底要求。您不妨研讨触及某种并言处置的分歧处理计划,但是不管您使剖析代码的效力有多低,您都邑在以后完成中碰到要求的瓶颈。

这里有1个应用Queue以及threading模块的根本示例。我修议浏览多处置与多线程比拟的利益(如@JonathanV提到的帖子),但是这无望对于懂得正在产生的工作有所赞助:

import Queue
import threading
import time
import urllib二

my_sites = [
 'http://news.ycombinator.com',
 'http://news.谷歌.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 = urllib二.urlopen(my_site)

# Grab a little data to make sure it is working
print url.read(一0二四)

# 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(四):
 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)

有闭threading的佳资本,请参阅Doug Hellmann的帖子here、IBM文章here(如上所述,这已成为我的通用线程树立)以及现实文档here。

佳了闭于扫描网站实质(疾速)的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。