我正在使用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,它们也会返回不同的结果?如果你想看到更多的代码,请问,我很乐意提供。感谢您提供的任何见解!