高樓迷論壇南京版數據爬取

目標網址:http://www.gaoloumi.com/forum.php?mod=forumdisplay&fid=30&page=0php

page後面加的數字就是論壇內容的頁面數,能夠經過改變其值獲取南京版的全部頁面。html

目標:咱們知道帖子的名稱表明着其內容的主要思想,因此能夠經過抓取全部帖子名稱來對其進行內容挖掘。app

步驟:ide

  • 抓取網頁帖子的名稱,保存在文本文件中。
  • 使用jieba分詞工具能夠實現分詞、去除停留詞(對文本分析來講可有可無的詞語)、判斷詞性等功能。
  • 製做詞雲(能夠使用WordCloud庫),我這裏推薦一個本身喜歡的網站工具:詞雲統計。這個網站樣式好看功能也很強大。

一 分詞代碼以下:函數

#對文本進行分詞
def get_divide(i): filename = 'file' + str(i + 1) + '.txt' stop_words = set(line.strip() for line in open('stopwords.txt',encoding = 'utf-8')) """ 這裏要用只讀模式打開,否者會將上一個方法寫入的內容覆蓋掉。 另外要注意用二進制模式( rb(二進制讀) , wb(二進制寫))打開,否者會編碼錯誤: UnicodeDecodeError: 'gbk' codec can't decode byte 0x90 in position 2: illegal multibyte sequence """ with open(filename,'rb') as f: file = f.readlines() for each in file: """ 直接jieba.cut()方法會報錯: not enough values to unpack (expected 2, got 1) 先引入jieba.posseg模塊就不會。 """ seg_list = pseg.cut(each) #flag是用於判斷詞性的
               for item,flag in seg_list: if not item in stop_words and flag == 'n': print(item)

 

 

二 所有代碼:工具

import requests from bs4 import BeautifulSoup import re import time import jieba import jieba.posseg as pseg def getReq(i): try: url_1 = "http://www.gaoloumi.com/forum.php?mod=forumdisplay&fid=30&page=" url = url_1 + str(i) r = requests.get(url) r.raise_for_status r.encoding = r.apparent_encoding return r.text except: print('') #獲取html文本 
def getHtml(r): soup = BeautifulSoup(r,'lxml') html = soup.find_all('a','s xst') return html #將每一個頁面全部帖子的名稱寫入文件
def writeHtml(html,i): try: fileName = 'file' + str( i + 1 ) + '.txt'
          #注意編碼格式
          with open(fileName,'w+',encoding = 'utf-8') as f: for each in html: f.write(each.string) f.write('\n') except: pass

#對文本進行分詞
def get_divide(i): filename = 'file' + str(i + 1) + '.txt' stop_words = set(line.strip() for line in open('stopwords.txt',encoding = 'utf-8')) """ 這裏要用只讀模式打開,否者會將上一個方法寫入的內容覆蓋掉。 另外要注意用二進制模式( rb(二進制讀) , wb(二進制寫))打開,否者會編碼錯誤: UnicodeDecodeError: 'gbk' codec can't decode byte 0x90 in position 2: illegal multibyte sequence """ with open(filename,'rb') as f: file = f.readlines() for each in file: """ 直接jieba.cut()方法會報錯: not enough values to unpack (expected 2, got 1) 先引入jieba.posseg模塊就不會。 """ seg_list = pseg.cut(each) #flag是用於判斷詞性的
               for item,flag in seg_list: if not item in stop_words and flag == 'n': print(item) #主函數
def main(): for i in range(5): r = getReq(i) html = getHtml(r) writeHtml(html,i) get_divide(i) print("" + str(i+1) + "個網頁爬取成功!") time.sleep(1) main()

 

 三 詞雲統計效果:網站

 

從詞雲圖中咱們能夠簡單的看出南京的居民更加關注國家對於機場的規劃。O(∩_∩)O哈哈~編碼

相關文章
相關標籤/搜索