爬蟲大做業

1.主題:html

   爬取騰訊課堂的springboot的視頻信息,這裏我主要對標題信息進行了爬取,爬取信息以後經過jieba分詞生成詞雲而且進行分析;python

 

2.爬取過程:spring

      第一步:springboot

       首先打開騰訊課堂官網,通過搜索,我發現和springboot相關的視頻有兩頁工具

       第一頁:https://ke.qq.com/course/list/springboot?task_filter=0000000&&page=1學習

        第二頁:https://ke.qq.com/course/list/springboot?task_filter=0000000&&page=2spa

       所以爬取springboot視頻全部頁面的連接可寫爲:命令行

for i in range(1,3):
    baseUrl = "https://ke.qq.com/course/list/springboot?task_filter=0000000&&page={}".format(i)
    getpagetitle(baseUrl,i)

  第二步:code

       獲取每一個視頻的標題內容:f12打開開發者工具,經過審查,不難發現,我要找的內容在course-card-list的li下的class=item-tt的類下的a標籤裏orm

    

  可是在這裏,我發現了一個問題,就是右邊的「熱門推薦」和下面的「猜你喜歡」的視頻課程也是這種結構,因此但我使用

soup.select(.course-card-list)[0].select("li")遍歷出來的li包含了不是springboot視頻的課程,後來我想到思路就是,經過就是再上一級html標籤來區分,soup.findAll('div',{'class':"market-bd market-bd-6 course-list course-card-list-multi-wrap"})但令我不解的是它只顯示
出div下的第一個li,其餘的沒顯示。後來我實在沒辦法,經過觀察界面我發現它第一頁顯示的是24條數據,第二頁顯示的是13條數據,因此我經過if邏輯語句去抓取到我所須要的數據,主要代碼以下:
  #總共有兩頁,第一頁有24條數據,第二頁有13條數據
    count = 0;
    for i in soup.select("li"):
          if len(i.select(".item-tt"))>0:
                 count = count +1
                 if pageNum==1:
                     if count<24:
                        title = i.select(".item-tt")[0].select("a")[0].text
                        saveTitle(title)
                     else:
                         break;
                 else:
                      if count<=13:
                          title = i.select(".item-tt")[0].select("a")[0].text
                          saveTitle(title)
                      else:
                          break;

 

 

3.把數據保存成文本:

 保存成文本代碼:

def saveTitle(title):
    f = open("springboot.txt","a",encoding='utf-8')
    f.write(title+"\n")
    f.close()

 4.生成詞雲:

# 生成詞雲
from PIL import Image,ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
# 獲取上面保存的字典
title_dict = changeTitleToDict()
graph = np.array(title_dict)
font = r'C:\Windows\Fonts\simhei.ttf'
# backgroud_Image表明自定義顯示圖片,這裏我使用默認的
# backgroud_Image = plt.imread("C:\\Users\\jie\\Desktop\\1.jpg")
# wc = WordCloud(background_color='white',max_words=500,font_path=font, mask=backgroud_Image)
wc = WordCloud(background_color='white',max_words=500,font_path=font)
wc.generate_from_frequencies(title_dict)
plt.imshow(wc)
plt.axis("off")
plt.show()

生成的詞雲圖片:

  

5.安裝詞雲遇到的問題:

爬取標題數據信息的過程比較順利,主要問題出如今wordCloud的安裝過程當中:

安裝worldCloud有兩種方式:

一是在pycharm中進入File-setting-proje-Project Interpreter、經過install worldCloud 安裝包

二是在

https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 中下載對應python版本和window 32/64位版本

個人python版本是3.6,win10 64位系統,因此下載

這裏把下載文件放在F盤

cmd命令行進入對應wordcloud安裝路徑,我是放在F盤,因此進入F:

輸入 pip install  wordcloud‑1.4.1‑cp36‑cp36m‑win_amd64.whl  便可成功導入

 

可是在執行方法一的時候總會出現這個錯誤提示:  

解決辦法應該是安裝Microsoft Visual C++ 14.0,可是文件比較大,沒有進行過嘗試,因此使用方法二

執行二方法:

能夠看到wordCloud已經安裝到

中,若是在這以後沒有在pycharm File-setting-proje-Project Interpreter看到wordCloud包,就須要手動在上圖路徑中找到wordCloud,複製到C:\User\  -  \PycharmProjects\**\verv\lib 中便可,(**表示本身建立的項目名字)

6.完整代碼:

 

import requests
import time
import re
import jieba
from bs4 import BeautifulSoup


def saveTitle(title):
    f = open("springboot.txt","a",encoding='utf-8')
    f.write(title+"\n")
    f.close()

def getpagetitle(baseUrl,pageNum):
    time.sleep(1)
    print(baseUrl)
    res = requests.get(baseUrl)  # 返回response對象
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text, 'html.parser')
    #總共有兩頁,第一頁有24條數據,第二頁有13條數據
    count = 0;
    for i in soup.select("li"):
          if len(i.select(".item-tt"))>0:
                 count = count +1
                 if pageNum==1:
                     if count<24:
                        title = i.select(".item-tt")[0].select("a")[0].text
                        saveTitle(title)
                     else:
                         break;
                 else:
                      if count<=13:
                          title = i.select(".item-tt")[0].select("a")[0].text
                          saveTitle(title)
                      else:
                          break;


 # 讀取保存的內容,並轉化爲字典,同時把結果返回生成詞雲;
def changeTitleToDict():
        f = open("springboot.txt", "r", encoding='utf-8')
        str =  f.read()
        stringList = list(jieba.cut(str))
        delWord = {"+", "/", "(", ")", "【", "】", " ", ";", "!", "、"}
        stringSet = set(stringList) - delWord
        title_dict = {}
        for i in stringSet:
          title_dict[i] = stringList.count(i)
        return title_dict

# 獲取騰訊課堂springBoot課程的全部頁數據;
for i in range(1,3):
    baseUrl = "https://ke.qq.com/course/list/springboot?task_filter=0000000&&page={}".format(i)
    getpagetitle(baseUrl,i)


# 生成詞雲
from PIL import Image,ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
# 獲取上面保存的字典
title_dict = changeTitleToDict()
graph = np.array(title_dict)
font = r'C:\Windows\Fonts\simhei.ttf'
# backgroud_Image表明自定義顯示圖片,這裏我使用默認的
# backgroud_Image = plt.imread("C:\\Users\\jie\\Desktop\\1.jpg")
# wc = WordCloud(background_color='white',max_words=500,font_path=font, mask=backgroud_Image)
wc = WordCloud(background_color='white',max_words=500,font_path=font)
wc.generate_from_frequencies(title_dict)
plt.imshow(wc)
plt.axis("off")
plt.show()

  

7.總結:

    經過爬蟲大做業的練習,使我進一步瞭解pathon的語法的使用,學會了如何去爬取本身所須要的數據,與此同時,我又能夠將所爬到的數據轉化成詞雲,雖然說遇到了許多困難,但整體上感受仍是挺有趣的,

   可是經過此次大做業我也發現了我還有許多東西須要學習,例如基礎知識還不是很牢固,但願在之後的學習能夠獲得進一步的提升。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息