用Scrapy抓取豆瓣小組資料(三)

鴨脖發表於2014-03-19

接著上篇部落格《用Scrapy抓取豆瓣小組資料(三)》,http://my.oschina.net/chengye/blog/124162

處理抓取的資料

我抓取了豆瓣一千多個小組的首頁,獲取的內容包括名稱,成員數目,小組連結以及相關友情小組和推薦小組。Scrapy匯出的資料格式可以是json/xml/csv等,我這邊用了json格式,每個小組資料的格式如下:

01 {
02     "groupName""\u5e2e\u52a9\u5927\u5c71\u91cc\u7684\u5b69\u5b50",
03     "groupURL""http://www.douban.com/group/16533/",
04     "RelativeGroups": [
05         "http://www.douban.com/group/henisiben/",
06         "http://www.douban.com/group/HOWPROJECT/",
07         "http://www.douban.com/group/225202/",
08         "http://www.douban.com/group/334177/",
09         "http://www.douban.com/group/gesanghua/",
10         "http://www.douban.com/group/J/",
11         "http://www.douban.com/group/17551/",
12         "http://www.douban.com/group/wutaishan/",
13         "http://www.douban.com/group/72790/",
14         "http://www.douban.com/group/ChindiaIndia/",
15         "http://www.douban.com/group/74982/",
16         "http://www.douban.com/group/119384/"
17     ],
18     "totalNumber""5833"
19 }

由於是要進行網路分析,假設每個小組就是一個節點(vertex),如果任意兩個小組是相關小組(通過RelativeGroups來判斷),則兩個節點相連線(edge)。所以處理指令碼要做的事情,第一生成節點的列表,第二生成節點間的連線。要注意的是對抓取的的重複資料進行清理,並且保證每個連線兩端的節點都是有效的。

偷懶用javascript處理了下,然後列印出一個gml格式的檔案,用於下一步分析。 GML格式的非常簡單,就是一個node列表加上edge列表。定義node時其實只有id是必填項,其他屬性都可以自定義的。

01 graph
02 [
03     comment "Douban group graph"
04     directed 0
05      
06     node
07     [
08         id 1
09         label "幫助大山裡的孩子"
10         size 5833
11         url "http://www.douban.com/group/16533/"
12     ]
13         node
14     [
15         id 2
16         label "加入這個組你就會變聰明"
17         size 3689
18         url "http://www.douban.com/group/congming/"
19     ]
20         .....
21         edge
22     [
23         source 1
24         target 2
25     ]
26 ]

在Gephi中視覺化處理網路

Gephi是一款很流行復雜網路視覺化軟體,我就用它開啟前面生成的GML檔案,然後可以對節點進行配色,分類以及佈局。具體就不講了,最後得到的網路圖是這個模樣的。

節點越大說明小組的連線個數越多,顏色代表著不同的小組型別(用Gephi的自帶演算法分類的)。下面這張圖這種我劃出了4個不同的區域,代表著不同型別的小組,有人能猜到分別是什麼型別的小組嗎?可以告訴你是哪四種:蕾絲小組,Gay小組,手工小組,美容小組。

Have Fun~

相關文章