有时候我们想爬的数据是表格样式,(网页好丑,大家将就一下)如下图。好消息是在页面html中能找到对应的数据

但坏消息是虽然数据存在于网页内部,没有可用来获取原始数据的API。 所以,现在你必须花费精力去解析网页。 这并不难,但是浪费时间,你可以用更加事半功倍的方式去解决。

pandas 世上都说Python大法好,pandas库提供了内置的方式可以读取html文件,并从中抽取出表数据。

pandas会在网页中寻找任何符合html表形式的数据,并将其转化WieDataFrame对象作为返回结果。

Code


pandas使用方法

import pandas as pd

#header=1 显示列名;header=0,不显示
pd.read_html(url,header)

实战代码开始


import pandas as pd
url = "http://hz.house.ifeng.com/detail/2014_10_28/50087618_1.shtml"
data = pd.read_html(url,header=1)
print(data)

注意啊,这里得到的数据格式是list。


    [      序号          楼盘名称   城区  签约套数  预定套数    签约面积(㎡)  签约均价(元/㎡)
    0    1.0        龙湖春江郦城   滨江    18     0    2178.61    23757.0
    1    2.0        海威钱塘之星   滨江    13     0    629.55㎡    17398.0
    2    3.0        大家运河之星   拱墅    12     0   1052.72㎡    10457.0
    3    4.0        保利城市果岭   下沙     8     0    743.05㎡    10457.0
        ..   ...           ...  ...   ...   ...        ...        ...
    85  86.0        广宇锦绣桃源   拱墅     1     0     86.44㎡    12473.0
    86  87.0       景瑞申花壹号院   拱墅     1     0     89.18㎡    21529.0
    87  88.0        复地黄龙和山   西湖     0     1         0㎡        0.0
    88  89.0         中粮方圆府   下城     0     1         0㎡        0.0
    89  90.0          东方铭楼   下沙     0    16         0㎡        0.0
    90   NaN         总计签约:  主城区   216    40  21755.55㎡        NaN
    
    [91 rows x 7 columns],    2        
		

DataFrame对象 df.to_json() 而只要知道数据存储在DataFrame中,一切都变的简单起来。 比如我很希望数据以json记形式输出,很简单!这只是一行代码的事情。


import pandas as pd

data = pd.read_html(url,header=1)
#data数据是list类型,要先转化为dataframe
df = pd.DataFrame(data)
df.to_json(orient='records')

df.to_csv() dataframe对象,还可以将数据输出保存为csv文件


import pandas as pd

data = pd.read_html(url,header=1)
df = pd.DataFrame(data)
#encoding为gbk编码,可以在ofiice excell中看中文不乱吗
df.to_csv('data.csv',encoding='gbk')

这里输出的虽然是csv文件,但是没有达到预期,不晓得是怎么回事。建议大家对数据做一下处理再保存到csv中。