本文在没使用框架的情况下,写的简单的多线程例子,合适初学者
#coding:utf-8
import re ###正则表达式
import threading ###多线程
import urllib2 ###urllib2
import time ###时间用来计算花费的时间
import sys ###来加载ascii 防止Error的出现
import pandas ###简单的库
reload(sys)
sys.setdefaultencoding('utf-8')
class Mythread(threading.Thread):
def __init__(self,func,args):
threading.Thread.__init__(self) ##初始化线程
self.func=func ##得到传进来的函数
self.args=args ##得到传进来的参数 这里是url
def run(self):
apply(self.func,self.args) ##执行将参数放进函数里面
class txinfo(object):
def __init__(self,url): ###初始化类 里面初始化该类需要的内容
self.url=url
global datas
global datas2 ###global是全局变量
datas=[]
datas2=[]
self.start() ###在初始化中启动这个类
def start(self): ###具体启动的细节
mypage=self.getpage()
self.get_info(mypage)
def getpage(self): ###解析网页
url=self.url
try:
req=urllib2.Request(url,headers={'User-Agent':'Browser'})
mypage=urllib2.urlopen(req).read()
except urllib2.HTTPError as e:
if hasattr(e, 'code'):
print "e.code :%s" % e.code
if hasattr(e, 'reason'):
print "e.reason: %s" % e.reason
return mypage
def get_info(self,mypage): ###具体获得内容
info=re.findall(r'(.*?)',mypage,re.S)###正则表达式
info2=re.findall(r'(.*?)',mypage,re.S)
datas.extend(info) ###传给全局变量
datas2.extend(info2)
if __name__=='__main__':
urlList=[] ###url列表
for i in range(0,10): ###将url添加进列表当中
urlList.append('http://v.qq.com/x/list/movie?cate=10001&area=-1&offset='+str(i*30))
time_start=time.time() ###计时开始时间
threadList=[Mythread(txinfo,(url,))for url in urlList] ###把线程添加到线程list中
for t in threadList: ###每个线程开始
t.setDaemon(True)
t.start()
for a,t in enumerate(threadList): ###每个线程加入
t.join()
time.sleep(0.1) ###每隔0.1秒加入一个
print "now is the :%s of thread join the threading"%a
time_end=time.time() ###计时结束时间
df=pd.DataFrame(datas,columns=['data']) ###将两个DataFrame进行合并
df2=pd.DataFrame(datas2,columns=['data2'])
df=df.join(df2)
df.to_csv('a.csv',header=None,index=None) ###写到csv中
print "the thread way take %s s"%(time_end-time_start)