为什么我的数据挖掘器线程会多次收集一些ID,有些则根本不收集?

时间:2011-10-23 18:10:42

标签: python multithreading data-mining

我正在使用urllib2和BeautifulSoup在python中编写数据挖掘器来解析一些网站,并尝试将其进程划分为几个线程,我得到以下输出:

  

成功抓取ID 301

     

成功抓取ID 301

     

ID为301的空结果

“成功”意味着我得到了我需要的数据。 “空”表示页面没有我需要的内容。 “ID”是附加到URL的整数,如site.com/blog/post/。

首先,每个线程应该解析不同的URL,而不是多次解析相同的URL。其次,我不应该为同一个URL获得不同的结果。

我正在以下列方式对进程进行线程化:我实例化一些线程,将每个线程的一部分传递给要解析的URL,然后以快乐的方式发送它们。这是代码:

def constructURLs(settings,idList):
    assert type(settings) is dict
    url = settings['url']
    return [url.replace('<id>',str(ID)) for ID in idList]        

def miner(urls,results):
    for url in urls:
        data = spider.parse(url)
        appendData(data,results)

def mine(settings,results):
    (...)
    urls = constructURLs(settings,idList)
    threads = 3 # number of threads
    urlList = [urls[i::threads] for i in xrange(threads)]
    for urls in urlList:
        t = threading.Thread(target=miner,args=(urls,results))
        t.start()

那么为什么我的线程会多次解析相同的结果,而它们应该都有唯一的列表?为什么即使使用相同的ID,它们也会返回不同的结果?如果你想看到更多的代码,请问,我很乐意提供。感谢您提供的任何见解!

0 个答案:

没有答案