[TOC]
- download这个项目
- python crawler.py 获得数据info.json,可以的话用我抓好的100个数据./info.json,自己抓耗时也得几分钟。
json数据结构为:
{ 'user1Id':{ 'nikeName':nikeName, 'fans':['fans1','fans2'],//粉丝列表前20个 'level':level, 'songsAllRank':{'song1Id':'song1Name','song2Id':'song2Name'}//所有时间听歌排行前100 } }
- python cluster即可得到图
- firefox 浏览器
- pip install selenium
- 浏览器驱动:
- firefoxhttps://github.com/mozilla/geckodriver/releases
- chmod +x geckodriver
- sudo cp geckodriver /usr/bin
- chromechromedriver
- chmod +x chromedriver
- sudo cp chromedriver /sur/bin
- firefoxhttps://github.com/mozilla/geckodriver/releases
- crawler.py Ids换为您需要的id,也可保持不变
- crawler.py 中的crawler(100),100换为你想要抓取的人数,默认为100个
-
ifream 中的数据抓取
# 获取g_iframe中的元素信息 driver.switch_to_frame('g_iframe')
-
selenium的span单击报错:
</iframe> is not clickable at point
- 解决办法:
# change songsAll = driver.find_element_by_css_selector('#songsall') action_chains = ActionChains(driver) action_chains.click(songsAll) action_chains.perform() # to songsAll = driver.find_element_by_css_selector('#songsall') driver.execute_script('arguments[0].click();',songsAll)
-
element找不到的情况:
# selenium隐式等待2秒 driver.implicitly_wait(2)
-
pandas.read_json()会自动转换为时间戳(现已不用pandas方案,直接用json)
# 禁止转换 pd.read_json(json.dumps(UserDict),convert_axes=False)
-
字典过滤:
def dataCleaning(data): # 字典过滤,将采集数据中搜有时间听歌100首以上的前100首过滤出来 return {k:v for(k,v) in data.items() if len(v['songsAllRank']) !=0}
-
-
第一步:下载字体:msyh.ttf (微软雅黑)放在系统字体文件夹下:
/usr/share/fonts
-
第二步:修改matplotlib配置文件:如上图的目录删除
font.family
和font.sans-serif
两行前的#, font.family 改为Microsoft YaHei 并在font.sans-serif后添加中文字体Microsoft YaHei 如图: -
第三步:删除~/.cache/matplotlib下文件fontList.py3k.cache
-