Python爬蟲:使用Python動態爬取馮大輝老師微博,再用詞雲分析

馮大輝老師在程序員圈子中還是比較出名的,大部分都知道他這個人,性格很鮮明。他現在正在創業,公司叫無碼科技,他有一個公衆號叫小道消息,新榜給的活躍粉絲是30多萬數據,他的微博有180萬粉,這說明馮老師在科技界還是很有影響力的。

事情是這樣的,上週的一天公衆號又照例收到了大輝老師的文章,我就在他的文章底下留言了,說要爬爬他的文章。

這是我用馮老師最近5000多條微博內容做的詞雲,大家可以圍觀一下。

之前也寫了一篇用python 來爬取朋友的QQ說說,大家也可以圍觀一下

Python爬蟲:動態爬取QQ說說並生成詞雲,分析朋友狀況

好了,開始進入正題:

#coding:utf-8

"""
爬取馮大輝老師的微博
代碼都在github上:https://github.com/pythonchannel

"""


import time
from selenium import webdriver
from lxml import etree
import word_cloud_py as wcp
import sys


reload(sys)
#這裏需要指定字符編碼
sys.setdefaultencoding( "utf-8" )

def get_content(f_name):

    #你的微博帳號
    username = 'xxxx'
    psd = 'xxxx'

    #獲取瀏覽器驅動
    driver = webdriver.Firefox()

    # 瀏覽器窗口最大化
    driver.maximize_window()

    driver.get('http://weibo.com/login.php')
    print('login............................')

    #給登錄框與密碼賦值
    driver.find_element_by_id('loginname').send_keys(username)
    driver.find_element_by_class_name('password').find_element_by_name('password').send_keys(psd)

    #點擊登錄按鈕
    driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a/span').click()

    # 這裏因爲登錄,需要有一個延時,不能直接切換到新網頁去
    time.sleep(3)

    # 登錄成功後,再用瀏覽器地址定向到大輝老師的微博列表頁,沒有什麼技巧,自己去找的
    driver.get("https://weibo.com/p/1005051577826897/home?from=page_100505_profile&wvr=6&mod=data&is_all=1#place")

    while True:
            # 下拉滾動條,從1開始到3結束 分2次加載完每頁數據
            for i in range(1,6):
                height = 20000*i#每次滑動20000像素
                strWord = "window.scrollBy(0,"+str(height)+")"
                driver.execute_script(strWord)
                time.sleep(4)

            selector = etree.HTML(driver.page_source)
            divs = selector.xpath('//*[@id="Pl_Official_MyProfileFeed__22"]/div/div/div[1]/div[4]')

          #  mode =a 不清空連續寫入
            with open('{}.txt'.format(f_name),'a') as f:
                for div in divs:
                    wb_content = div.xpath('./div[3]/text()')
                    wb_time = div.xpath('./div[2]/a/text()')
                    wb_content = wb_content[0] if len(wb_content) > 0 else ''
                    wb_time = wb_time[0] if len(wb_time) > 0 else ''
                    wb_content = wb_content.strip()  # 去掉左右兩邊的空格
                    wb_time = wb_time.strip()
                    print wb_content, wb_time
                    f.write(wb_content+'\n')

            #分析得知當爲最後一頁時,最後的page next S_txt1 S_line1不見了
            if driver.page_source.find('page next S_txt1 S_line1') == -1:
                print '沒有下一頁了'
                break

            # 找到“下一頁”的按鈕元素,原本想用xpath與classname,都失敗了
            # 這裏我是用css來定位的,page next S_txt1 S_line1 在空格之間加'.' 來連接
            submit = driver.find_element_by_css_selector('.page.next.S_txt1.S_line1')
            submit.click()

if __name__ == '__main__':
    f_name = 'ddddd'
    get_content(f_name)
    wcp.create_word_cloud(f_name)

特別注意一下,生成詞雲的代碼在github上word_cloud_py文件中,調用方法就行了。

其它補充的文字也沒有什麼要說的,註釋都在代碼中,接下來要使用Scrapy爬蟲框架了,雖然快過年了,但學習還是不能停下來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章