1. 程式人生 > 實用技巧 >Python爬蟲:爬取科技新聞,進而整理,產出資料分析

Python爬蟲:爬取科技新聞,進而整理,產出資料分析

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:Yolandarrrrr

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

前言

大資料時代到來,網路資料正成為潛在寶藏,大量商業資訊、社會資訊以文字等儲存在網頁中,這些具有相當大價值的資訊不同於傳統的結構化資料,屬於非結構化資料,需要我們使用一定的技術和方法將其轉化為計算機能夠理解的特徵資訊,然後我們才能對其進行分析。這裡我們採用python爬蟲提取騰訊網站科技新聞的標題,通過文字分析,來進行分析。

資料獲取

資料獲取來源是QQ入口網站科技區頻道https://new.qq.com/ch/tech/瀑布流熱點新聞的標題。

我們使用selenium工具進行資料獲取,相對於常用的urllib、beautifulsoup和request爬蟲模組,使用selenium能對WEB瀏覽器進行自動化操作,優點是獲取的資料所見即所得,不用寫和測試GET網頁的配置,對瀑布流式的資料獲取簡單,缺點要等待瀏覽器對資料的載入,速度較慢。

與其他爬蟲方法一樣,我們需要通過HTML的標籤來獲取資料。

可以看到,熱點新聞的連結存放在

爬蟲流程

# 從標籤class獲取元素
elements1 = browser.find_elements_by_css_selector('li.item.cf')
elements2 = browser.find_elements_by_css_selector('li.item-pics')

write_conn, read_conn = Pipe()
process = Process(target=recv, args=(write_conn,))
process.start()
for
element in elements1: # 獲取<a>的內容 a = element.find_element_by_tag_name('a') print(a.get_attribute("innerHTML")) if len(element.get_attribute('id')) > 0: read_conn.send((element.get_attribute('id'), a.get_attribute("innerHTML"))) else: read_conn.send(('20200624002985_1', a.get_attribute("innerHTML"))) for element in elements2: a = element.find_element_by_tag_name('a') if len(element.get_attribute('id')) > 0: read_conn.send((element.get_attribute('id'), a.text)) else: read_conn.send(('20200624002985_1', a.text))

騰訊新聞入口網站的新聞採取的是瀑布流式重新整理,當用戶滑鼠滑動向下,才會有新資料載入到瀏覽器。所以我們還得讓瀏覽器滑動滾軸,根據測試騰訊新聞每天會更新幾百條新聞,若想全部載入完大概有2000多條,在我的執行機器上大概需要10分鐘的滑動。我們還能配置瀏覽器關閉圖片獲取,加快速度。

start = time.time()
while time.time() - start < 1 * 12:
    # 隨機的滑動距離
    distance = random.randint(300, 400)
    js = 'window.scrollBy(0,' + str(distance) + ')'
    # 瀏覽器滑動
    browser.execute_script(js)
    # 隨機的休息時間
    time.sleep(random.uniform(0.2, 0.4))



通過測試我們發現,在滑動完畢後讀取資料會出現之前檢視不到的

標籤,通過class名字我們知道這是一個慢載入的內容,原因是滑動後馬上讀取資料,但是仍有未收到的HTTP資料,瀏覽器無法載入完畢。解決的辦法是可以在滑動後讓程式sleep一段時間再讀取元素。

爬完後接下來我們利用正則表示式將不同標籤下的標題提出出來:

r = re.findall(r'\"([^\"]*)\"', t) #提取<img alt...
r = re.findall(r'<div class=".*">(.*?)</div>', t) #提取<div class...

文字分析

將爬取到的所有標題寫入txt檔案中形成我們的目標分析文字。利用TextRank演算法來進行文字分析。TextRank演算法可以用來提取關鍵詞和摘要。TextRank4ZH是指標對中文文字的TextRank演算法的python演算法實現。

TextRank演算法思路:
  1. 把給定的文字 T 按照完整句子進行分割,即:T=[S1,S2,…,Sm]
  2. 對於每個句子,進行分詞和詞性標註處理,並過濾掉停用詞,只保留指定詞性的單詞,如名詞、動詞、形容詞,其中 ti,j 是保留後的候選關鍵詞。Si=[ti,1,ti,2,…,ti,n]
  3. 構建候選關鍵詞圖 G = (V,E),其中 V 為節點集,由(2)生成的候選關鍵片語成,然後採用共現關係(Co-Occurrence)構造任兩點之間的邊,兩個節點之間存在邊僅當它們對應的詞彙在長度為K 的視窗中共現,K表示視窗大小,即最多共現 K 個單詞。
  4. 根據 TextRank 的公式,迭代傳播各節點的權重,直至收斂。
  5. 對節點權重進行倒序排序,從而得到最重要的 T 個單詞,作為候選關鍵詞。
  6. 由 5 得到最重要的 T 個單詞,在原始文字中進行標記,若形成相鄰片語,則組合成多詞關鍵詞。

TextRank4ZH是針對中文文字的TextRank演算法的python演算法實現。在命令列中安裝
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple

import sys
import Lib
try:
    Lib.reload(sys)
    sys.setdefaultencoding('utf-8')
except:
    pass

import codecs
from textrank4zh import TextRank4Keyword

text = codecs.open('./doc/騰訊1天.txt', 'r', 'utf-8').read()

tr4w = TextRank4Keyword()
tr4w.analyze(text=text,lower=True, window=3, pagerank_config={'alpha':0.85})

word_list=''
phrase_list=''
keywd=[]
keywg=[]
for item in tr4w.get_keywords(30, word_min_len=2):
    word_list=word_list+' '+item.word
    keywd.append(item.word)
    keywg.append(item.weight)

#print('--phrase--')

for phrase in tr4w.get_keyphrases(keywords_num=30, min_occur_num = 0):
    phrase_list = phrase_list + ' ' + phrase

將頻率出現次數最高的前30個關鍵詞提取出來以條狀圖進行展現:

可以看出手機領域是近期常出現的新聞,在年中,很多手機廠商釋出了新款旗艦手機,所以熱點頗多。其中廣受關注的就是Apple、華為和小米公司。

選取出現次數大於5次和10次的短語:

可以看出直播帶貨是近期討論較為頻繁的話題,蘋果釋出會的話題是爆發較大的話題

詞雲

將提取到的關鍵詞或關鍵片語拼接成字串利用WordCloud包生成詞雲,將高頻率的關鍵詞或關鍵片語進行視覺上的突出。

在python中生成詞雲時,出現匯入Wordcloud包失敗,wordcloud是python第三方詞雲庫,需要下載wordcloud編譯後安裝包,將檔案放入python.exe存在的位置;

執行pip install wordcloud-1.5.0-cp36-cp36m-win_amd64.whl ;

再重新執行pip install WordCloud,即安裝成功。

高頻詞詞雲:
高頻短語詞雲:

通過條狀圖和詞雲圖,我們可以直觀地看到最近大家關注的科技新聞的熱點。以我們分析的資料為例,當天的熱點話題包括各蘋果、華為、疫情、直播、晶片、手機等,由此我們可以直接定位熱點的關鍵內容;通過關鍵片語的詞雲分析,我們可以擴充套件熱點資訊,如蘋果晶片、功能體驗、企業技術、升級一體驗等,由此獲取關鍵內容之間的聯絡。其中,蘋果公司的動態位居話題首榜,這是因為蘋果公司知名度廣,其產品也是全球關注的明星產品,由於馬太效應,其釋出的產品動態也一直是民眾、企業關注的重點。而通過條狀圖,我們可以看到蘋果的話題的討論熱度明顯高於其他關鍵詞,因此我們也可以看出此次蘋果晶片的釋出動態的影響性之大,話題討論熱度之高。

我們通過爬取入口網站上的科技新聞標題並進行文字分析,最終通過視覺化可以便於我們快速獲得科技最熱話題,可以使我們快速通過搜尋高頻率關鍵詞或關鍵短語來獲取最近的熱點文章內容;而我們在進行科技話題分析時,各個相鄰分佈的高頻率關鍵詞或許也存在某種相關性,如蘋果之後是手機、華為、中國等,給我們在進行話題分析時提供一種思路。

小結
通過實踐操作爬蟲加文字分析來進行資訊的分析,我們得出了有意思的結果。在實踐過程中,我們遇到了很多問題,通過查詢學習資料再一步步地解決了問題,由此收穫了很多,發現也只有動手實踐操,讓知識落地才能真正地學會知識。而這次課題實驗,我們也小小地領會到了爬蟲和文字分析的作用,運用不同的文字分析的演算法,或許我們還能得到更多其他的資訊,而在今後的學習工作中,我們就可以利用python爬蟲加文字分析來來研究其他方面的資訊,來幫我們或許更多內容,解決一些關鍵性知識問題。