亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[Python3爬蟲]爬取新浪微博用戶信息及微博內容

系統 2120 0

[Python3爬蟲]爬取新浪微博用戶信息及微博內容

大數據時代,對于研究領域來說,數據已經成為必不可少的一部分。新浪微博作為新時代火爆的新媒體社交平臺,擁有許多用戶行為及商戶數據,因此需要研究人員都想要得到新浪微博數據,But新浪微博數據量極大,獲取的最好方法無疑就是使用Python爬蟲來得到。網上有一些關于使用Python爬蟲來爬取新浪微博數據的教程,但是完整的介紹以及爬取用戶所有數據信息比較少,因此這里分享一篇主要通過selenium包來爬取新浪微博用戶數據的文章。 碼字不易,喜歡請點贊!!!

[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第1張圖片

目標

爬取新浪微博用戶數據,包括以下字段:id,昵稱,粉絲數,關注數,微博數,每一篇微博的內容,轉發數,評論數,點贊數,發布時間,來源,以及是原創還是轉發。(本文以GUCCI(古馳)為例)

方法

  • 使用selenium模擬爬蟲
  • 使用BeautifulSoup解析HTML

結果展示

[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第2張圖片

步驟分解

1.選取爬取目標網址
首先,在準備開始爬蟲之前,得想好要爬取哪個網址。新浪微博的網址分為網頁端和手機端兩個,大部分爬取微博數據都會選擇爬取手機端,因為對比起來,手機端基本上包括了所有你要的數據,并且手機端相對于PC端是輕量級的。
下面是GUCCI的手機端和PC端的網頁展示。
[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第3張圖片
[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第4張圖片

2.模擬登陸
定好爬取微博手機端數據之后,接下來就該模擬登陸了。
模擬登陸的網址
登陸的網頁下面的樣子
[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第5張圖片
模擬登陸代碼

            
                  try:
   		print(u'登陸新浪微博手機端...')
   		##打開Firefox瀏覽器
    	browser = webdriver.Firefox()
    	##給定登陸的網址
        url = 'https://passport.weibo.cn/signin/login'
        browser.get(url)
        time.sleep(3)
        #找到輸入用戶名的地方,并將用戶名里面的內容清空,然后送入你的賬號
        username = browser.find_element_by_css_selector('#loginName')
        time.sleep(2)
        username.clear()
        username.send_keys('****')#輸入自己的賬號
        #找到輸入密碼的地方,然后送入你的密碼
        password = browser.find_element_by_css_selector('#loginPassword')
        time.sleep(2)
        password.send_keys('ll117117')
        #點擊登錄
        browser.find_element_by_css_selector('#loginAction').click()
        ##這里給個15秒非常重要,因為在點擊登錄之后,新浪微博會有個九宮格驗證碼,下圖有,通過程序執行的話會有點麻煩(可以參考崔慶才的Python書里面有解決方法),這里就手動
        time.sleep(15)
    except:
        print('########出現Error########')
    finally:
        print('完成登陸!')

            
          

[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第6張圖片

3.獲取用戶微博頁碼
在登錄之后可以進入想要爬取的商戶信息,因為每個商戶的微博量不一樣,因此對應的微博頁碼也不一樣,這里首先將商戶的微博頁碼爬下來。與此同時,將那些公用信息爬取下來,比如用戶uid,用戶名稱,微博數量,關注人數,粉絲數目。
[Python3爬蟲]爬取新浪微博用戶信息及微博內容_第7張圖片

            
              	#本文是以GUCCI為例,GUCCI的用戶id為‘GUCCI’
	id = 'GUCCI'
    niCheng = id
    #用戶的url結構為 url = 'http://weibo.cn/' + id
    url = 'http://weibo.cn/' + id
    browser.get(url)
    time.sleep(3)
    #使用BeautifulSoup解析網頁的HTML
    soup = BeautifulSoup(browser.page_source, 'lxml')
    #爬取商戶的uid信息
    uid = soup.find('td',attrs={'valign':'top'})
    uid = uid.a['href']
    uid = uid.split('/')[1]
    #爬取最大頁碼數目
    pageSize = soup.find('div', attrs={'id': 'pagelist'})
    pageSize = pageSize.find('div').getText()
    pageSize = (pageSize.split('/')[1]).split('頁')[0]
    #爬取微博數量
    divMessage = soup.find('div',attrs={'class':'tip2'})
    weiBoCount = divMessage.find('span').getText()
    weiBoCount = (weiBoCount.split('[')[1]).replace(']','')
     #爬取關注數量和粉絲數量
    a = divMessage.find_all('a')[:2]
    guanZhuCount = (a[0].getText().split('[')[1]).replace(']','')
    fenSiCount = (a[1].getText().split('[')[1]).replace(']', '')

            
          

4.根據爬取的最大頁碼,循環爬取所有數據
在得到最大頁碼之后,直接通過循環來爬取每一頁數據。抓取的數據包括,微博內容,轉發數量,評論數量,點贊數量,發微博的時間,微博來源,以及是原創還是轉發。

            
              #通過循環來抓取每一頁數據
 for i in range(1, pageSize+1):  # pageSize+1
 		#每一頁數據的url結構為 url = 'http://weibo.cn/' + id + ‘?page=’ + i
        url = 'https://weibo.cn/GUCCI?page=' + str(i)
        browser.get(url)
        time.sleep(1)
        #使用BeautifulSoup解析網頁的HTML
        soup = BeautifulSoup(browser.page_source, 'lxml')
        body = soup.find('body')
        divss = body.find_all('div', attrs={'class': 'c'})[1:-2]
        for divs in divss:
            # yuanChuang : 0表示轉發,1表示原創
            yuanChuang = '1'#初始值為原創,當非原創時,更改此值
            div = divs.find_all('div')
            #這里有三種情況,兩種為原創,一種為轉發
            if (len(div) == 2):#原創,有圖
           		 #爬取微博內容
                content = div[0].find('span', attrs={'class': 'ctt'}).getText()
                aa = div[1].find_all('a')
                for a in aa:
                    text = a.getText()
                    if (('贊' in text) or ('轉發' in text) or ('評論' in text)):
                    	#爬取點贊數
                        if ('贊' in text):
                            dianZan = (text.split('[')[1]).replace(']', '')
                        #爬取轉發數
                        elif ('轉發' in text):
                            zhuanFa = (text.split('[')[1]).replace(']', '')
                         #爬取評論數目
                        elif ('評論' in text):
                            pinLun = (text.split('[')[1]).replace(']', '')    
                 #爬取微博來源和時間   
                span = divs.find('span', attrs={'class': 'ct'}).getText()
                faBuTime = str(span.split('來自')[0])
                laiYuan = span.split('來自')[1]

			#和上面一樣
            elif (len(div) == 1):#原創,無圖
                content = div[0].find('span', attrs={'class': 'ctt'}).getText()
                aa = div[0].find_all('a')
                for a in aa:
                    text = a.getText()
                    if (('贊' in text) or ('轉發' in text) or ('評論' in text)):
                        if ('贊' in text):
                            dianZan = (text.split('[')[1]).replace(']', '')
                        elif ('轉發' in text):
                            zhuanFa = (text.split('[')[1]).replace(']', '')
                        elif ('評論' in text):
                            pinLun = (text.split('[')[1]).replace(']', '')
                span = divs.find('span', attrs={'class': 'ct'}).getText()
                faBuTime = str(span.split('來自')[0])
                laiYuan = span.split('來自')[1]
				
			#這里為轉發,其他和上面一樣
            elif (len(div) == 3):#轉發的微博
                yuanChuang = '0'
                content = div[0].find('span', attrs={'class': 'ctt'}).getText()
                aa = div[2].find_all('a')
                for a in aa:
                    text = a.getText()
                    if (('贊' in text) or ('轉發' in text) or ('評論' in text)):
                        if ('贊' in text):
                            dianZan = (text.split('[')[1]).replace(']', '')
                        elif ('轉發' in text):
                            zhuanFa = (text.split('[')[1]).replace(']', '')
                        elif ('評論' in text):
                            pinLun = (text.split('[')[1]).replace(']', '')
                span = divs.find('span', attrs={'class': 'ct'}).getText()
                faBuTime = str(span.split('來自')[0])
                laiYuan = span.split('來自')[1]
        time.sleep(2)
        print(i)

            
          

4.在得到所有數據之后,可以寫到csv文件,或者excel
最后的結果顯示在上面展示啦!!!!
到這里完整的微博爬蟲就解決啦!!!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美永久免费 | 亚洲在线精品视频 | 2018天天干天天操 | 国产精品久久久久一区二区 | 久久精品国产一区二区小说 | 男人与牛做爰的视频 | 在线观看视频亚洲 | 男女啪啪网站 | 欧日韩美香蕉在线观看 | 精品一区二区三区视频在线观看免 | 色综合视频在线观看 | 麻豆a| 午夜伦情电午夜伦情影院 | 毛片毛片| 夜夜躁日日躁狠狠 | 欧洲一级毛片免费 | 欧美精品h在线播放 | 久久久久久毛片免费播放 | 久久久噜噜噜www成人网 | 亚洲日本一区二区三区 | 亚洲综合欧美日韩 | 色综合久久天天综合观看 | 国产色产综合色产在线观看视频 | 女性一级全黄生活片 | 久久精品免视看国产成人2021 | 高清一区高清二区视频 | 日本不卡免费高清视频 | 91中文字幕 | 天天操天天操天天操天天操 | 日本一级毛片a免费播放 | 久久这里 | 99在线视频免费观看 | 欧美一区二区三区在线观看 | 99热这里只有精品一区二 | 四虎永久免费网站 | 久久99一区| 色国产在线视频一区 | 中国日韩欧美中文日韩欧美色 | 色综合一本 | 91热国内精品永久免费观看 | 国产一级免费在线观看 |