106.7.6 古佳怡 網路爬蟲、分析與視覺化.

Slides:



Advertisements
Similar presentations
教师队伍建设 组员:王英利 赵香媖 侯娟. 主讲内容 2. 中小学教师队伍建设 1. 职业教育师资队伍建设国际比较 3. 高校教师队伍建设与管理.
Advertisements

醫學美學之我見ー肉毒桿菌 班級:應日三乙 姓名:蔡雅卉 學號: 497E0076. 前言 現在的人,已經把 整型看做是微不足 道的事情了。即使 只是戴牙套、局部 雷射、割雙眼皮、 打美白針、肉毒桿 菌等等,都可以在 身體上做不同的改 變,而讓自己更滿 意自己的外表。
深圳市沙井中学:刘沅南制作. 1 、出生的小宝宝 ( 新生命)是怎么来的呢? 新生命都是从一个细胞 —— 受精卵发育而 来的。 2 、 受精卵又是如何产生的呢? 是精子和卵细胞相互结合产生的。
(一)辦桌文化起始略說: 1. 祭祀宗教 2. 生命禮儀 3. 外燴 --- 老師、師公、師傅、總鋪師 4. 搬桌搬椅時代 (二) 食物食材 1. 靠山考海 2. 基本:炒米粉、糍、檳榔 3. 小吃搬上桌 (三) 變變變 1. 調味不同 2. 師承不同 3. 地點也變.
系统流程及操作介绍. 规范 网上名称 党政机关 事业单位 规范 网上名称 标识申请 网站 开办审核 加挂 标识证书 加挂 标识证书 重点工作回顾 社会组织 规范 网上名称 标识申请 加挂 标识证书.
提 纲 三次考察与改革的回顾 1 学院三周来的新面貌 及下一步工作思路 2 凝心聚力、团结协作、狠抓落实 3.
第4章 交易性金融资产与可供出售金融资产 学习目标
——以通渭县图书馆青树小项目“携老上网游”为例
(4F01) 陳可兒 (4F03) 張令宜 (4F05) 何秀欣 (4F14) 潘美玲
2013浙江省行测专题 密卷解析及备考冲刺 罗 姮.
讲故事训练 授课人:田轶.
一、平面点集 定义: x、y ---自变量,u ---因变量. 点集 E ---定义域, --- 值域.
第十一課 菜園 6-11.
恒泰期货研究所2016年 期债暴跌告一段落,短期波动降低 国债期货周报
尾矿库综合调查 金属非金属矿山尾矿库安全技术中心.
小学《人•自然•社会》 五年级教材解读 浙江省教育厅教研室 李 荆 -
校本选修课 第三专题 西藏问题 北京师大二附中 李文燕.
輕歌妙舞送黃昏 組員名單 組長:程鵬飛 組員:黎達華 劉展鵬 邱迦欣.
宜点通账户策划.
期考議題 單元一:資訊科技(eg上網活動)與人際關係 單元二:青少年社政參與(80後) 單元二:郊野公園與房屋政策/問題
閔肖蔓 諮商心理師 中央大學專任心理師 交通大學+中原大學兼任心理師 八方文教、杏陵醫學基金會特約講師 精贊學習公司特約講師
大學多元入學方案 財務金融二 王詩茹.
管理学基本知识.
企业税收筹划与税务风险管理 暨南大学财税系 沈肇章.
滁州学院首届微课程教学设计竞赛 课程名称:高等数学 主讲人:胡贝贝 数学与金融学院.
微孢子虫生物研究.
第三章 菜单的设计与制作 第一节 菜单的重要性 第二节 菜单的种类及其特点 第三节 菜单的设计与制作.
第三章 心理安全 广西师范大学 罗蕾.
人地關係 ── 熱帶雨林 人文活動對環境的影響.
正修科技大學教學發展中心 教師教學觀摩與經驗分享 電子工程系 張法憲副教授.
俄语字母的发音体系 阅读规则.
时间管理 -----高一团体辅导.
教育者,寂寞之事业,而实为神圣之天职,扶危定倾,端赖于此,有志者固不以彼而易此也。
拾貳、 教育行政 一、教育行政的意義 教育行政,可視為國家對教育事務的管理 ,以增進教育效果。 教育行政,乃是一利用有限資源在教育參
蘇軾詞的賞析
伯裘書院 環保廣告能否有效 地推動環保意識.
92-90數學課程綱要比較 -- 不含數與計算 台北市立師範學院 數學資訊教育系副教授 李源順.
課程銜接 九年一貫暫行綱要( )  九年一貫課程綱要( ) 國立台南大學數學教育系 謝 堅.
2.4 二元一次方程组的应用(1).
4H (1)歐宛曈 (9)李熹漩 (12)吳紀芙 (14)唐曉筠
柯奕宏(06) 王予亨(13) 郭秉逸(15) 楊雯凈(23) 顏佑瑩(32)
第十五章 传播学调查研究方法.
自然與生活科技領域 認識太陽能 蘇紋琪、石明玉.
Python金融数据分析教程 解放你的python编程能力 第6关金融数据的统计分析 Python金融数据分析教程 1.
Python金融数据分析教程 解放你的python编程能力 第4关 如何获取金融数据 Python金融数据分析教程 1.
 全能的天才畫家- 李奧納多‧達文西 (西元1452年-1519年) 指導老師:袁淑芬老師 製作人:饒佩芯.
認識我的故鄉_台中市.
信息采集 参考:W.Bruce Croft等著,刘挺等译. 搜索引擎-信息检索实践. 机械工业出版社,2010.
一种准确高效的领域知识图谱构建方法.
网络营销实务 第16讲 搜索引擎优化(1) 主讲人:李小斌.
第一部 上班族賺錢密碼.
用Python建模与数据处理 俞熹 2017/1.
Python Final Project Hello Idol
第九章 Web資料採掘 9. 1 非結構化Web資料來源 9. 2 Web採掘分類 9. 3 Web內容採掘 9. 4 Web結構採掘 9
企业商品网络营销策划实训.
主在聖殿中! 崇拜開始前請安靜就座 務請把您的手提電話關掉!.
網站HOLMES DATA監測代碼.
精忠报国  演唱:屠洪纲 作词:陈涛 作曲:张宏光  狼烟起 江山北望  龙起卷 马长嘶 剑气如霜  心似黄河水茫茫  二十年 纵横间 谁能相抗  恨欲狂 长刀所向  多少手足忠魂埋骨它乡  何惜百死报家国  忍叹惜 更无语 血泪满眶  马蹄南去 人北望  人北望 草青黄 尘飞扬  我愿守土复开疆  堂堂中国要让四方来贺.
國民年金 np97006.
樂樂請假了 尊重的故事 資料來源:臺北縣國民小學品德教育手冊 故事來源:臺北縣國民小學品德教育手冊 網路小故事
设岗申请 审核发布 岗位申请 助教培训 津贴发放 工作考核 授课教师 岗位要求 工作内容 开课单位 确定课程、岗位 发布需求 研究生
聽聽那冷雨---重點摘要 二愛 王煜榕.
理想與現實 空談與貼地 可二:1-12.
新豐鄉.
憲政與民主 應化3A 邱泓明.
古蹟知性之旅 我和新港奉天宮有個約 報告人:陳 映 竹 傅 湘 甯.
§1.3.3 地球公转的意义 ——昼夜长短的变化 凤阳县第二中学 柳家全.
聖經的獨特.
用加減消去法解一元二次聯立方程式 台北縣立中山國中 第二團隊.
Presentation transcript:

106.7.6 古佳怡 網路爬蟲、分析與視覺化

先聊聊之前做的奇怪東西 資料來源: 動機與目的: 最後成果: 聯合報過去十年的 焦點 / 要聞 / 民意論壇 資料 首先假設: 2 資料來源: 聯合報過去十年的 焦點 / 要聞 / 民意論壇 資料 動機與目的: 首先假設: 「民意論壇」- 偏向民眾所關注的議題 「焦點」與「要聞」 - 偏向報社本身所關注的議題 想要呈現: 1. 版面之間,關注哪些議題、關注程度比較 2. 議題之間,不同時間的關注程度變化 最後成果:

背後實作流程 Python JavaScript crawler 中研院CKIP Topic Model LDA 工人智慧 D3.js JSON bag of words

今天來做點類似的事情 4 抓取新聞 文本分析 視覺化呈現

首先 5 抓取新聞 文本分析 視覺化呈現

資料來源 6 http://www.appledaily.com.tw/realtimenews/section/new/

首先,需要把資料抓下來 還記得網頁其實是在網路上的一個檔案? 到底我們抓到什麼? 瀏覽器右上角 > 更多工具 > 開發人員工具 7 還記得網頁其實是在網路上的一個檔案? import requests # 抓網路檔案 url = "http://www.appledaily.com.tw/realtimenews/section/new" res = requests.get(url) 到底我們抓到什麼? 瀏覽器右上角 > 更多工具 > 開發人員工具 符合HTML格式的檔案內容 密密麻麻,一大堆tag,非常噁心

分析結構 新聞在哪裡? 瀏覽器右上角 > 更多工具 > 開發人員工具 > ctrl+F 搜尋關鍵字 8 新聞在哪裡? 瀏覽器右上角 > 更多工具 > 開發人員工具 > ctrl+F 搜尋關鍵字 from bs4 import BeautifulSoup # 爬梳檔案 soup = BeautifulSoup(res.text,"html.parser") for item in soup.select(".rtddt"): # 取得一個完整新聞

分析結構 新聞裡面有什麼? from bs4 import BeautifulSoup # 爬梳檔案 9 新聞裡面有什麼? from bs4 import BeautifulSoup # 爬梳檔案 soup = BeautifulSoup(res.text,"html.parser") for item in soup.select(".rtddt"): # 取得一個完整新聞 # 取得新聞標題、熱門度、時間、類別、網址 news_title = item.find("h1").text news_popular = int(news_title[news_title.rfind("(")+1 : -1]) news_time = item.find("time").text news_category = item.find("h2").text news_url = item.find("a")["href"] 最右邊的"("+1 不含 最後字元

進一步抓內文 重覆剛剛流程 問題來了,全文結構好像有點髒? # 再次抓網路檔案 10 重覆剛剛流程 # 再次抓網路檔案 news_url = "http://www.appledaily.com.tw/"+ news_url res2 = requests.get(news_url) # 再次爬梳檔案 soup2 = BeautifulSoup(res2.text,"html.parser") # 找到內文 問題來了,全文結構好像有點髒?

進一步抓內文 放棄全文,改擷取較乾淨的meta data # 再次抓網路檔案 11 放棄全文,改擷取較乾淨的meta data # 再次抓網路檔案 news_url = "http://www.appledaily.com.tw/"+ news_url res2 = requests.get(news_url) # 再次爬梳檔案 soup2 = BeautifulSoup(res2.text,"html.parser") # 找到內文 news_content = soup2.find("meta",{"name" : "description"}) if news_content: news_content = news_content["content"] else: news_content = ""

最後,把它們存起來 但是如果我想抓 N 頁所有的新聞? from bs4 import BeautifulSoup 12 from bs4 import BeautifulSoup news_group = [] soup = BeautifulSoup(res.text,"html.parser") for item in soup.select(".rtddt"): # 取得新聞標題、熱門度、時間、類別、網址 # 從網址進一步取得內文 news_group.append({"標題":news_title, "時間":news_time, "類別":news_category, "內文":news_content, "人氣":news_popular}) 但是如果我想抓 N 頁所有的新聞?

觀察每一頁網址 所以在最外面多包一層for 第二頁 第三頁 合理推測第一頁 news_group = [] page = 3 13 第二頁 第三頁 合理推測第一頁 所以在最外面多包一層for news_group = [] page = 3 for i in range(1,page): res = requests.get("http://www.appledaily.com.tw/realtimenews/section/new/"+str(i)) soup = BeautifulSoup(res.text,"html.parser") for item in soup.select(".rtddt"): # 取得新聞標題、熱門度、時間、類別、網址 # 從網址進一步取得內文 # 把資料存進news_group

最後不要忘記 14 import time time.sleep(0.2) 除非你想要讓你的IP被ban掉

接著對新聞內容 15 抓取新聞 文本分析 視覺化呈現

Jieba文本分析 基於簡體字開發 import jieba import jieba.analyse # 支援繁體字典 16 基於簡體字開發 import jieba import jieba.analyse # 支援繁體字典 jieba.set_dictionary("dict.txt.big.txt") # 斷詞(全採用模式、精準模式[預設]) # e.g., "我要成為神奇寶貝大師" # 全採用模式:我/ 要/ 成/ 為/ 神奇/ 神奇寶貝/ 大/ 師 # 精準模式:我要/ 成為/ 神奇寶貝/ 大師 seglist = jieba.cut(news_content, cut_all=False) print("斷詞:" + "/ ".join(seglist)) # 取關鍵字 tags = jieba.analyse.extract_tags(news_content, 3) print("三個關鍵字:" + "/ ".join(tags)) TF-IDF取關鍵字

Snownlp文本分析 基於簡體字開發 情感分析來自買賣評價 from snownlp import SnowNLP 17 基於簡體字開發 情感分析來自買賣評價 from snownlp import SnowNLP s = SnowNLP(news_content) # 斷詞 print("斷詞:" + "/ ".join(s.words)) # 關鍵字 print("三個關鍵字:" + "/ ".join(s.keywords(3))) # 摘要 print("三個摘要:" + "/ ".join(s.summary(3))) # 情感分析(代表是正面情緒的機率[0,1]) print("情感分析:" + s.sentiments) TextRank取關鍵字與摘要 http://ihong-blog.logdown.com/posts/873914

比較分析結果 18

比較分析結果 19

比較分析結果 20

最後,視覺化呈現 21 抓取新聞 文本分析 視覺化呈現

目前為止,我們抽出了 22 時間 類別 標題 人氣 內文 斷詞 TF-IDF取關鍵字 關鍵字 摘要 情感分析

可以比較哪些資訊? 時間(橫軸)、人氣(縱軸)、類別(顏色) 時間(橫軸)、情感(縱軸)、類別(顏色) 23 時間(橫軸)、人氣(縱軸)、類別(顏色) 不同類別的新聞人氣度 不同時間的新聞人氣度 不同時間會不會傾向於張貼某些類別的新聞 時間(橫軸)、情感(縱軸)、類別(顏色) 不同類別新聞的正負面情緒 不同時間的新聞情緒 不同時間會不會傾向於張貼某些情緒的新聞 關鍵字(橫軸)、頻率(縱軸)、類別(顏色) 不同字詞的出現頻率 不同類別傾向於出現哪些字詞 TF-IDF取關鍵字

可以做成哪些圖表? 24 TF-IDF取關鍵字

先決定類別顏色 # category = ["焦點","熱門","爆社","動物","副刊","3C",……,"論壇"] 25 # category = ["焦點","熱門","爆社","動物","副刊","3C",……,"論壇"] # 統計多少類別需要上色 category = [] have_label = [] for news in news_group: if news["類別"] not in category: # 給予各類別一個編號 print(len(category),news["類別"]) category.append(news["類別"]) have_label.append(0) # 平均分配顏色 import matplotlib.cm as cm import numpy as np colors = cm.rainbow(np.linspace(0, 1, len(category))) # 紀錄每個類別的顏色 colors_map = dict() for i in range(len(category)): colors_map[category[i]] = colors[i]

開始畫點 import matplotlib.pyplot as plt # 在圖表上畫點 (x,y) = (距離最新新聞的時間,人氣) 26 import matplotlib.pyplot as plt # 在圖表上畫點 (x,y) = (距離最新新聞的時間,人氣) latest_time = datetime.strptime(news_group[0]["時間"], "%Y/%m/%d %H:%M") for news in news_group: news_time = datetime.strptime(news["時間"], "%Y/%m/%d %H:%M") x = int((latest_time-news_time).seconds//60) y = int(news["人氣"]) # 已經在圖上標示該顏色的類別 if have_label[category.index(news["類別"])] == 1: plt.scatter([x], [y], color=colors_map[news["類別"]]) # 尚未在圖上標示該顏色的類別 else: plt.scatter([x], [y], color=colors_map[news["類別"]], label=str(category.index(news["類別"]))) have_label[category.index(news["類別"])] = 1

最後標上其他資訊 # 標示圖表標題、x軸、y軸 plt.title('timeline vs. popular') 27 # 標示圖表標題、x軸、y軸 plt.title('timeline vs. popular') plt.xlabel('new <-- old(minute)') plt.ylabel('popular') # 顯示圖表顏色標示 plt.legend() # 標示圖表 plt.show()