Re: [问题]scrapy如何把抓到的资料存成这样格式?

楼主: ccwang002 (亮)   2015-02-12 00:33:13
※ 引述《allen511081 (蓝)》之铭言:
: ※ 引述《allen511081 (蓝)》之铭言:
: : 各位好,小弟上次抓的资料格式已经如我上次发问的样子
: : title birdName count
: : XXX yyy zzz
: : XXX yyy zzz
: : XXX yyy zzz
: : XXX yyy zzz
: : 但是我现在想要把格式改成以下的样子,这样可以方便以后的处理
: : title title title title birdName count birdName count birdName count
: : XXX XXX XXX XXX yyy zzz yyy zzz yyy zzz =>为一笔
: : 后面的birdName和count是依据网页资料的笔数决定,每个网页的笔数不一定,
用了原 po 提供的范例档,底下是好读完整版
http://nbviewer.ipython.org/gist/ccwang002/6b51ae21a91cba13c2ef/Transform.ipynb
我是用 Python 3.4 跑的,2.x 要注意一下 unicode 的转换。
你爬下的内容有 \ufeff 之类的字符没有清,要小心字段不要处理错,
我有特别独立出来成输入的参数 (obs_cols) 。
import pandas as pd
def flatten_obs(bird_obs, obs_cols, preserved_cols=None):
"""Flatten brid observations into one row record."""
keep_cols = preserved_cols if preserved_cols else []
# assume values preserved columns don't change
keep_values = list(bird_obs.loc[0, keep_cols].values)
# flatten bird observation
flatten_obs = []
flatten_cols = []
for bird_ix, (bird, count) in (
bird_obs.loc[:, obs_cols].iterrows() # extract wanted columns
):
flatten_obs.extend([bird, count])
# create incremental column suffix, starting 0
flatten_cols.extend([
'bridName_%d' % bird_ix, # birdName_0, ...
'count_%d' % bird_ix, # count_0, ...
])
# join kept and flatten columns as DataFrame
return pd.DataFrame(
[keep_values + flatten_obs], # nested list required by DataFrame
columns = keep_cols + flatten_cols
)
使用的话,
orig_df = pd.read_csv('./items.csv')
obs_cols = ['birdName', 'count']
preserved_cols = ['weather', 'location', 'time', 'date', 'birdCondition']
flatten_df = flatten_obs(orig_df, obs_cols, preserved_cols)
合并 flatten_df 的话可以用 pandas.concat,重复的就放在一起,
遇上没有的字段,就会自动补 NaN 值(相当于对不同记录的字段做 OUTER JOIN)
用法:
pd.concat(flatten_df_list)
我觉得你在爬的时候那些 preserved_cols 值并不会重复出现,应该是你额外加的,
所以现在有种做两次功(重复->去重复)的感觉,也许可以重想一下程式的流程。
这个版本的 code 为了好读和方便可能不是最有效的方式,
也尽量不用 Numpy 函式来处理,因为不确定你对它的熟悉度。
pd.concat 可以完全不用,因为合并的字段长什么可以很简单的预测(最多几只鸟)
这样就能预先建立好一个矩阵。
CSV 我直接读有格式错误,我使用的档案都放在
https://gist.github.com/6b51ae21a91cba13c2ef

Links booklink

Contact Us: admin [ a t ] ucptt.com