Python编写爬虫,用的是Scrapy框架,将数据存储到了本机的MongoDB数据库上。导数据的时候发现数据的转化,速度有点慢。
from pymongo import MongoClient
#建立MongoDB数据库连接
client = MongoClient('localhost',27017)
#连接所需数据库,test为数据库名
db=client.TrimPage
#连接所用集合,也就是我们通常所说的表,collection为表名
collection = 'Trimcodename2'
table=db[collection]
#查找集合中所有数据
result=[]
for item in table.find():
result.append(item)
很快,我就得到了一个叫result的list
接下来,我想把这些数据保存到一个Pandas的DataFrame里,保存的过程中顺便进行处理。下面的代码是根据网上现有代码进行修改。主要的思路是先建一个DataFrame对象,再通过append函数添加数据。
import pandas as pd
df = pd.DataFrame()
for i in result:
a=i['id']
b = i['content'].replace('\n','').replace('\xa0','').replace('\r','').replace('\t','').replace(' ','')
df = df.append([[a,b]])
结果遇到了一个坑,数据跑了一个多小时都没跑完。我强行结束发现,只进行了一般。
于是我尝试了一个直接导入。
df2=pd.DataFrame(result)
结果竟然成功了!!!!几秒钟!!!
但是还有一步处理数据的过程,是这步比较花时间吗?
我继续尝试使用DataFrame的map函数,看看会消耗多少时间。
df2['content'] = df2['content'].map(lambda x: x.replace('\n','').\
replace('\xa0','').replace('\r','').replace('\t','').replace(' ','') )
还是瞬间!!!
然后这个故事告诉我们,尽量不要用循环!!
郁闷的我决定记录下这个一个半小时的教训。