本文連結:https://blog.csdn.net/weixin_41261833/article/details/111546033
關於資料的爬取主要說以下幾個內容:
1)關於翻頁操作第一頁:https://movie.douban.com/subject/26413293/comments?status=P第二頁:https://movie.douban.com/subject/26413293/comments?start=20&limit=20&status=P&sort=new_score第三頁:https://movie.douban.com/subject/26413293/comments?start=40&limit=20&status=P&sort=new_score123456
上面我們分別展示了第1-3頁的頁面連結,我們主要是觀察其中的規律,其中start是獲取評論的起始位置,limit代表獲取多少條評論資料。觀察結果:3個連結的不同在於這個start的不同,在後續翻頁時,我們只需要修改start引數即可。
2)關於反扒說明對於豆瓣的爬取,其實找到真實的短評連結,是極其容易的。但是這裡有一點我必須說明,你可以不登陸爬取資料,但是隻能是操作一段時間,過一段時間,會檢測到你是爬蟲。因此,你一定要登陸後,攜帶cookie去進行資料的爬取。如果你有時候不知道請求頭中,該放一些什麼,那麼就請都加上,等有空再慢慢總結。
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' }12345678
cookie有些人可能又不知道在哪裡,還是告訴你一下吧!好多引數都在下面呢,如果你想學好爬蟲,那麼這些引數代表什麼,你總應該需要知道吧。
最終再補充一點:我本來打算把豆瓣上的《大秦賦》短評,全部爬下來作為分析的素材。然而並沒有成功爬取到所有的短評,一波三折,最終只爬到了500條,當然我覺得這也是豆瓣的一種反扒措施,最大可見短評數就500條,多的不給你看。(有大神的話,可以下去研究一下)
資料處理爬取後的資料,再怎麼規整,也和用於分析的資料之間,有一定的差距。因此再分析之前,一定的資料清洗是很有必要的。在資料清洗之前,我們簡單看看資料是什麼樣子的。
df = pd.read_csv("final_all_comment.csv",index_col=0)df.head(10)12
結果如下:
其實資料還是挺漂亮的,但是我們還是需要做如下處理:
print("刪除之前的記錄數:",df.shape)df.drop_duplicates(subset=['評論時間','評論內容'],inplace=True,keep='first')print("刪除之前的記錄數:",df.shape)123
2)評論時間處理
因為《大秦賦》是2020年12月1號開播的,現在是12月16號晚,因此所有的評論資料肯定都是2020年12月開始有的,因此我們只保留有用的“日期”資料(哪一天)。而對於時分秒來說,我們只保留“小時”資料。
df["評論天數"] = df["評論時間"].str[8:-9].astype(int)df["小時"] = df["評論時間"].str[11:-6].astype(int)12
3)評論星級說明
觀察原頁面的評論星級,可以看到所有的星級並不是以數字展示的,而是用星星進行前端渲染出來的,但是頁面的原始碼,卻展示的是星級數。
對應到頁面原始碼中,我們看看又是怎麼樣子的呢?
可以看到:3星的數字是30,其它的以此類推,1星的數字是10,2星的數字是20…我看著就是很不爽,因此我在爬取資料的時候,已經將這些數字,全都除以10後計算。
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 = "我愛你我愛你我愛你好你好你好哈哈哈哈哈"func(st)123456789101112
結果如下:
利用上述函式,我們可以對爬取到的資料,應用此操作。
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 stdf["評論內容"] = df["評論內容"].apply(func)1234567891011
資料視覺化操作
俗話說:“字不如表,表不如圖”。爬取到的資料,最終做視覺化的呈現,才能夠讓大家對資料背後的規律,有一個清晰的認識。下面我們從以下幾個方面來進行資料視覺化分析。
評論數隨時間的變化趨勢二十四小時內的評論數的變化趨勢星級評分的餅圖大家主要都在評論一些啥關於資料視覺化工具,我就不用pyecharts了,我還是迴歸原始,用最原始的matplotlib庫進行資料視覺化的展示。畢竟我們沒有什麼複雜的展示,程式碼越簡短越好。
2)二十四小時內的評論數的變化趨勢最近總聽到周圍有人在討論這部劇,下面就來看看大家都是在啥時候追劇呢?從24小時圖中可以看出:晚上7-24點,評論急劇上升,大多數人都是6點下班,可能吃個飯到7點左右,或者直接在下班過程中,就開始了一天的追劇。這裡還有一波早高峰5-8點,難道睡不著?早上還要起來刷刷據,然後上班。這裡還有兩個時間段:上午10-11點,中午12-15點,大家可以分析下,肯定有相當一部分小夥伴,正在摸魚工作呀
3)星級評分的餅圖劇究竟好不好,看看觀眾的評分少不了,這也是觀眾最直觀的想法。
1星:很差2星:較差3星:還行4星:推薦1星:力薦從下圖中可以看出:大家對於該劇的哦=評價還是很低的,1星和2星基本佔據了整個餅圖,也就是說該劇並沒有得到大家的認可。
還有一部分人,對該劇的劇情和臺詞很是吐槽,嬴政稱如果呂不韋是自己的生父,願意跟他一起離開秦國浪跡天涯,這真的是少年老成的嬴政能說出來的話嗎?
《大秦賦》是“大秦帝國”系列的第四部,原名為《大秦帝國之天下》,播出時改為了《大秦賦》。於是很多人將這部劇和2009年播出的《大秦帝國》作比較,以此來諷刺該劇。
好了,今天的分享就到此為止。如果你有更多的時間,更多的分析思路,可以下去拓展哦!