91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么爬取娛樂圈的排行榜數據

發布時間:2021-11-25 13:40:32 來源:億速云 閱讀:164 作者:iii 欄目:大數據

本篇內容主要講解“Python怎么爬取娛樂圈的排行榜數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python怎么爬取娛樂圈的排行榜數據”吧!

一、網站原始信息

我們先來看下原始的網站頁面

Python怎么爬取娛樂圈的排行榜數據

如果我們想一個一個復制這些數據,再進行分析,估計要花一天的時間,才可以把明星的各期排行數據處理好。估計會處理到崩潰,還有可能會因為人為原因出錯。

而用爬蟲,半個小時不到就可以處理好這些數據。接下來看看怎么把這些數據用Python爬下來吧。

二、先來看下爬取后數據的部分截圖

1 男明星人氣榜數據

Python怎么爬取娛樂圈的排行榜數據

2 女明星人氣榜數據

Python怎么爬取娛樂圈的排行榜數據

三、如何獲取123粉絲網的爬蟲信息

以下是獲取代碼用到信息的具體步驟:

  • step1:瀏覽器(一般用火狐和Google我用的360)中打開123粉絲網

  • step2:按鍵盤F12 -> ctrl+r

  • step3: 點擊results.php -> 到Headers中找到代碼所需的參數

Python怎么爬取娛樂圈的排行榜數據

四、分步爬蟲代碼解析

1 用Python中的Requests庫獲取網頁信息

新手學習,Python 教程/工具/方法/解疑+V:itz992

#爬取當前頁信息,并用BeautifulSoup解析成標準格式
import requests  #導入requests模塊
import bs4

url = "https://123fans.cn/lastresults.php?c=1"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
            'Request Method':'Get'}
req = requests.get(url, timeout=30, headers=headers)
soup = bs4.BeautifulSoup(req.text, "html.parser")

代碼解析:

url = :待爬取網頁的url鏈接,相當于指定爬取評論的路徑,本文對應填入上文step3中標注的Requests URL值。

headers = :待爬取網頁的首部信息,把上文step3中標注的Headers中關鍵詞后面的內容對應填入即可。

req =:用get方法獲取待爬網頁的所有信息。

soup:用BeautifulSoup把爬取內容解析成標準格式,方便數據處理。

注1:有些網站訪問時必須帶有瀏覽器等信息,如果不傳入headers就會報錯,所以本例中加入了頭部的一些信息。我試了一下該鏈接不加首部信息也可以正常運行,和加了首部信息得到的結果完全一致。

2 把爬取到的數據整合到一個數據框中

#把爬取的數據整合到數據框中
import re                #正則表達式庫
import numpy as np   
import pandas as pd

period_data = pd.DataFrame(np.zeros((400,5)))  #構造400行5列的全0矩陣備用
period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']  #給0矩陣列命名
#把當期的數據填入表格中
#姓名信息
i = 0 
name = soup.findAll("td", {"class":"name"})
for each in name:
    period_data['name'][i]=each.a.text  #依次加入姓名
    i += 1
#人氣信息
j = 0
popularity = soup.findAll("td", {"class":"ballot"})
for each in popularity:
    period_data['popularity_value'][j]=float(each.text.replace(",",''))  #依次加入人氣值
    j += 1
#期數信息
period_num = int(re.findall('[0-9]+', str(soup.h3.text))[0])
period_data['period_num'] = period_num
#截止日期
end_time_0 = str(re.findall('結束日期.+[0-9]+', str(soup.findAll("div", {"class":"results"})))).split('.')
end_time = ''
for str_1 in end_time_0:
    end_time = end_time + re.findall('[0-9]+',str_1)[0]
period_data['end_time'] = end_time
#有序數,方便截取前多少位
period_data_1 = period_data.sort_values(by='popularity_value',ascending=False)
period_data_1['rank'] = range(period_data_1.shape[0])

代碼解析:

period_data:構造400行5列的矩陣用來存放每一期排行數據(前幾期排行榜存放了前341位明星的人氣值,我怕往期的會多一點數據,所以取了400行)。

period_data.columns:給數據加一個列名。

name:用findAll函數取出所有的名字信息。

for each in name:用循環把名字信息存放到period_data中。

popularity:用findAll函數取出所有的人氣值信息。

for each in popularity:用循環把人氣信息存放到period_data中。

period_num:獲取期數信息。

end_time:獲取截止日期。

period_data_1['rank']:在最后一列加入有序數,方便數據截取使用。

接下來展示批量爬蟲代碼

五、批量爬蟲代碼解析

1 定義爬蟲函數

import requests  #導入requests模塊
import bs4
import re        #正則表達式庫
import numpy as np   
import pandas as pd
import warnings
import time
import random

warnings.filterwarnings('ignore')  #忽視ignore
#headers的內容在Headers里面都可以找到
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
            'Request Method':'Get'}
def crawler(url):    
    req = requests.get(url, timeout=30, headers=headers)  # 獲取網頁信息
    soup = bs4.BeautifulSoup(req.text, "html.parser")  #用soup庫解析
    period_data = pd.DataFrame(np.zeros((400,5)))  #構造400行5列的全0矩陣備用
    period_data.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']  #給0矩陣列命名
    #把當期的數據填入表格中
    #姓名信息
    i = 0 
    name = soup.findAll("td", {"class":"name"})
    for each in name:
        period_data['name'][i]=each.a.text  #依次加入姓名
        i += 1
    #人氣信息
    j = 0
    popularity = soup.findAll("td", {"class":"ballot"})
    for each in popularity:
        period_data['popularity_value'][j]=float(each.text.replace(",",''))  #依次加入人氣值
        j += 1
    #期數信息
    period_num = int(re.findall('[0-9]+', str(soup.h3.text))[0])
    period_data['period_num'] = period_num
    #截止日期
    end_time_0 = str(re.findall('結束日期.+[0-9]+', str(soup.findAll("div", {"class":"results"})))).split('.')
    end_time = ''
    for str_1 in end_time_0:
        end_time = end_time + re.findall('[0-9]+',str_1)[0]
    period_data['end_time'] = end_time
    #有序數,方便截取前多少位
    period_data_1 = period_data.sort_values(by='popularity_value',ascending=False)
    period_data_1['rank'] = range(period_data_1.shape[0])
    return period_data_1

本段代碼是把分段爬蟲代碼整合到一個函數中,方便反復調用。

2 反復調用函數實現批量爬蟲

新手學習,Python 教程/工具/方法/解疑+V:itz992
  period_data_final = pd.DataFrame(np.zeros((1,5)))  #構造400行5列的全0矩陣備用
period_data_final.columns = ['name', 'popularity_value', 'period_num', 'end_time','rank']  #給0矩陣列命名
for qi in range(538,499,-1):
    print("目前爬到了第",qi,'期')
    if qi == 538:
        url="https://123fans.cn/lastresults.php?c=1"
    else:
        url="https://123fans.cn/results.php?qi={}&c=1".format(qi)
    time.sleep(random.uniform(1, 2))
    date = crawler(url)
    period_data_final = period_data_final.append(date)
period_data_final_1 = period_data_fina.loc[1:,:] #去掉第一行無用數據

本段代碼是反復調用爬蟲函數獲取頁面數據,并用append整合到一個數據框中。

到此,相信大家對“Python怎么爬取娛樂圈的排行榜數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲阜市| 海淀区| 南充市| 常山县| 长宁区| 长子县| 小金县| 海口市| 武安市| 江油市| 和顺县| 江陵县| 苗栗县| 洞头县| 稻城县| 新营市| 乌兰察布市| 乐山市| 礼泉县| 阿巴嘎旗| 盐边县| 富蕴县| 临城县| 庆安县| 登封市| 潢川县| 宜阳县| 苏尼特右旗| 黄山市| 晋城| 麦盖提县| 曲水县| 泸溪县| 金寨县| 鸡东县| 高雄县| 崇仁县| 辛集市| 威信县| 沽源县| 东明县|