溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何用Python抓取相關(guān)數(shù)據(jù)

發(fā)布時(shí)間:2021-11-23 14:31:59 來(lái)源:億速云 閱讀:153 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“如何用Python抓取相關(guān)數(shù)據(jù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何用Python抓取相關(guān)數(shù)據(jù)”吧!

數(shù)據(jù)爬取

巧婦難為無(wú)米之炊,做數(shù)據(jù)分析之前最重要的就是“數(shù)據(jù)獲取”。于是,我準(zhǔn)備用Python爬取豆瓣上的短評(píng)數(shù)據(jù)以及一些評(píng)論時(shí)間信息、評(píng)價(jià)星級(jí)信息。

關(guān)于數(shù)據(jù)的爬取主要說(shuō)以下幾個(gè)內(nèi)容:

1)關(guān)于翻頁(yè)操作

第一頁(yè):
https://movie.douban.com/subject/26413293/comments?status=P
第二頁(yè):
https://movie.douban.com/subject/26413293/comments?start=20&limit=20&status=P&sort=new_score
第三頁(yè):
https://movie.douban.com/subject/26413293/comments?start=40&limit=20&status=P&sort=new_score

上面我們分別展示了第1-3頁(yè)的頁(yè)面鏈接,我們主要是觀察其中的規(guī)律,其中start是獲取評(píng)論的起始位置,limit代表獲取多少條評(píng)論數(shù)據(jù)。觀察結(jié)果:3個(gè)鏈接的不同在于這個(gè)start的不同,在后續(xù)翻頁(yè)時(shí),我們只需要修改start參數(shù)即可。

2)關(guān)于反扒說(shuō)明

對(duì)于豆瓣的爬取,其實(shí)找到真實(shí)的短評(píng)鏈接,是極其容易的。但是這里有一點(diǎn)我必須說(shuō)明,你可以不登陸爬取數(shù)據(jù),但是只能是操作一段時(shí)間,過(guò)一段時(shí)間,會(huì)檢測(cè)到你是爬蟲(chóng)。因此,你一定要登陸后,攜帶cookie去進(jìn)行數(shù)據(jù)的爬取。如果你有時(shí)候不知道請(qǐng)求頭中,該放一些什么,那么就請(qǐng)都加上,等有空再慢慢總結(jié)。

 headers = {
    "Accept":"application/json, text/plain, */*",
    "Accept-Language":"zh-CN,zh;q=0.9",
    "Connection":"keep-alive",
    "Host":"movie.douban.com",
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
    "Cookie":'這里是你自己的cookie'
    }

cookie有些人可能又不知道在哪里,還是告訴你一下吧!好多參數(shù)都在下面呢,如果你想學(xué)好爬蟲(chóng),那么這些參數(shù)代表什么,你總應(yīng)該需要知道吧。

如何用Python抓取相關(guān)數(shù)據(jù)

最終再補(bǔ)充一點(diǎn):我本來(lái)打算把豆瓣上的《大秦賦》短評(píng),全部爬下來(lái)作為分析的素材。然而并沒(méi)有成功爬取到所有的短評(píng),一波三折,最終只爬到了500條,當(dāng)然我覺(jué)得這也是豆瓣的一種反扒措施,最大可見(jiàn)短評(píng)數(shù)就500條,多的不給你看。(有大神的話(huà),可以下去研究一下)

數(shù)據(jù)處理

爬取后的數(shù)據(jù),再怎么規(guī)整,也和用于分析的數(shù)據(jù)之間,有一定的差距。因此在分析之前,一定的數(shù)據(jù)清洗是很有必要的。在數(shù)據(jù)清洗之前,我們簡(jiǎn)單看看數(shù)據(jù)是什么樣子的。

df = pd.read_csv("final_all_comment.csv",index_col=0)
df.head(10)

結(jié)果如下:

其實(shí)數(shù)據(jù)還是挺漂亮的,但是我們還是需要做如下處理:

1)剔除重復(fù)值

我們認(rèn)為:如果'評(píng)論時(shí)間'和'評(píng)論內(nèi)容'完全一致的話(huà),就認(rèn)為他是同一條評(píng)論,需要將其剔除。

print("刪除之前的記錄數(shù):",df.shape)
df.drop_duplicates(subset=['評(píng)論時(shí)間','評(píng)論內(nèi)容'],inplace=True,keep='first')
print("刪除之前的記錄數(shù):",df.shape)

2)評(píng)論時(shí)間處理

因?yàn)椤洞笄刭x》是2020年12月1號(hào)開(kāi)播的,現(xiàn)在是12月16號(hào)晚,因此所有的評(píng)論數(shù)據(jù)肯定都是2020年12月開(kāi)始有的,因此我們只保留有用的“日期”數(shù)據(jù)(哪一天)。而對(duì)于時(shí)分秒來(lái)說(shuō),我們只保留“小時(shí)”數(shù)據(jù)。

df["評(píng)論天數(shù)"] = df["評(píng)論時(shí)間"].str[8:-9].astype(int)
df["小時(shí)"] = df["評(píng)論時(shí)間"].str[11:-6].astype(int)

3)評(píng)論星級(jí)說(shuō)明

觀察原頁(yè)面的評(píng)論星級(jí),可以看到所有的星級(jí)并不是以數(shù)字展示的,而是用星星進(jìn)行前端渲染出來(lái)的,但是頁(yè)面的源代碼,卻展示的是星級(jí)數(shù)。

如何用Python抓取相關(guān)數(shù)據(jù)

對(duì)應(yīng)到頁(yè)面源代碼中,我們看看又是怎么樣子的呢?

可以看到:3星的數(shù)字是30,其它的以此類(lèi)推,1星的數(shù)字是10,2星的數(shù)字是20......我看著就是很不爽,因此我在爬取數(shù)據(jù)的時(shí)候,已經(jīng)將這些數(shù)字,全都除以10后計(jì)算。

4)評(píng)論內(nèi)容機(jī)械壓縮去重

對(duì)于一條評(píng)論來(lái)說(shuō),有些人可能手誤,或者湊字?jǐn)?shù),會(huì)出現(xiàn)將某個(gè)字或者詞語(yǔ),重復(fù)說(shuō)多次,因此在進(jìn)行分詞之前,需要做“機(jī)械壓縮去重”操作。下面是我很早之前寫(xiě)的一段代碼,大家可以去看我的CSDN博客,里面有很好的解釋。

def func(st):
    for i in range(1,int(len(st)/2)+1):
        for j in range(len(st)):
            if st[j:j+i] == st[j+i:j+2*i]:
                k = j + i
                while st[k:k+i] == st[k+i:k+2*i] and k<len(st):   
                    k = k + i
                st = st[:j] + st[k:]    
    return st

st = "我愛(ài)你我愛(ài)你我愛(ài)你好你好你好哈哈哈哈哈"
func(st)

結(jié)果如下:

如何用Python抓取相關(guān)數(shù)據(jù)

利用上述函數(shù),我們可以對(duì)爬取到的數(shù)據(jù),應(yīng)用此操作。

def func(st):
    for i in range(1,int(len(st)/2)+1):
        for j in range(len(st)):
            if st[j:j+i] == st[j+i:j+2*i]:
                k = j + i
                while st[k:k+i] == st[k+i:k+2*i] and k<len(st):   
                    k = k + i
                st = st[:j] + st[k:]    
    return st

df["評(píng)論內(nèi)容"] = df["評(píng)論內(nèi)容"].apply(func)

數(shù)據(jù)可視化操作

俗話(huà)說(shuō):“字不如表,表不如圖”。爬取到的數(shù)據(jù),最終做可視化的呈現(xiàn),才能夠讓大家對(duì)數(shù)據(jù)背后的規(guī)律,有一個(gè)清晰的認(rèn)識(shí)。下面我們從以下幾個(gè)方面來(lái)進(jìn)行數(shù)據(jù)可視化分析。

  1. 評(píng)論數(shù)隨時(shí)間的變化趨勢(shì)

  2. 二十四小時(shí)內(nèi)的評(píng)論數(shù)的變化趨勢(shì)

  3. 星級(jí)評(píng)分的餅圖

  4. 大家主要都在評(píng)論一些啥

關(guān)于數(shù)據(jù)可視化工具,我就不用pyecharts了,我還是回歸原始,用最原始的matplotlib庫(kù)進(jìn)行數(shù)據(jù)可視化的展示。畢竟我們沒(méi)有什么復(fù)雜的展示,代碼越簡(jiǎn)短越好。

1)評(píng)論數(shù)隨時(shí)間的變化趨勢(shì)

從圖中可以看出:短評(píng)數(shù)量在12月4日之前,一直處于上升趨勢(shì),在12月4日達(dá)到頂峰。和文章最開(kāi)始的說(shuō)明一致,前面幾天觀眾對(duì)于該劇的期待值較高,但是在12月4日后,突然出現(xiàn)斷崖式下降,說(shuō)明隨著該劇的更新,大家有所失望了。

如何用Python抓取相關(guān)數(shù)據(jù)

3)星級(jí)評(píng)分的餅圖

劇究竟好不好,看看觀眾的評(píng)分少不了,這也是觀眾最直觀的想法。

  • 1星:很差

  • 2星:較差

  • 3星:還行

  • 4星:推薦

  • 1星:力薦

從下圖中可以看出:大家對(duì)于該劇的哦=評(píng)價(jià)還是很低的,1星和2星基本占據(jù)了整個(gè)餅圖,也就是說(shuō)該劇并沒(méi)有得到大家的認(rèn)可。

到此,相信大家對(duì)“如何用Python抓取相關(guān)數(shù)據(jù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI