亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

發布時間:2020-08-09 09:29:45 來源:網絡 閱讀:781 作者:學Python派森 欄目:編程語言

作為互聯網界的兩個對立的物種,產品汪與程序猿似乎就像一對天生的死對頭;但是在產品開發鏈條上緊密合作的雙方,只有通力合作,才能更好地推動項目發展。那么產品經理平日里面都在看那些文章呢?我們程序猿該如何投其所好呢?我爬取了人人都是產品經理欄目下的所有文章,看看產品經理都喜歡看什么。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

1. 分析背景

1.1. 為什么選擇「人人都是產品經理」

人人都是產品經理是以產品經理、運營為核心的學習、交流、分享平臺,集媒體、培訓、招聘、社群為一體,全方位服務產品人和運營人,成立8年舉辦在線講座500+期,線下分享會300+場,產品經理大會、運營大會20+場,覆蓋北上廣深杭成都等15個城市,在行業有較高的影響力和知名度。平臺聚集了眾多BAT美團京東滴滴360小米網易等知名互聯網公司產品總監和運營總監。選取這個社區更有代表性。

1.2. 分析內容

  • 分析人人都是產品經理產品經理欄目下的 6574 篇文章的基本情況,包括收藏數、評論數、點贊數等
  • 發掘最受歡迎的文章及作者
  • 分析文章標題長度與受歡迎程度之間的關系
  • 展現產品經理都在看什么

1.3. 分析工具

  • Python 3.6
  • Matplotlib
  • WordCloud
  • Jieba

2. 數據抓取

使用 Python編寫的爬蟲抓取了人人都是產品經理社區的產品經理欄目下的所有文章并保存為csv格式,文章抓取時期為 2012年6月至 2019 年 1月 21 日,共計6574篇文章。抓取 了 10 個字段信息:文章標題、作者、作者簡介、發文時間、瀏覽量、收藏量、點贊量、評論量、正文、文章鏈接。

2.1. 目標網站分析

這是要爬取的網頁界面,可以看到是直接加載出來的,沒有AJAX,爬取起來毫無難度。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

仔細觀察要爬取的網頁,我們可以看到頁面連接有規律可循,連接中page后面的參數就是頁面數,所以我們編寫爬蟲時可以直接用for循環來構造所有頁面連接代碼如下:


1import requests
2from bs4 import BeautifulSoup
3import csv
4
5headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
6 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
7 'Cache-Control': 'max-age=0',
8 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
9 'Connection': 'keep-alive',
10 'Host': '[www.woshipm.com'](http://www.woshipm.com'),
11 'Cookie' : 't=MHpOYzlnMmp6dkFJTEVmS3pDeldrSWRTazlBOXpkRjBzRXpZOU4yVkNZWWl5QVhMVXBjMU5WcnpwQ2NCQS90ZkVsZ3lTU2Z0T3puVVZFWFRFOXR1TnVrbUV2UFlsQWxuemY4NG1wWFRYMENVdDRPQ1psK0NFZGJDZ0lsN3BQZmo%3D; s=Njg4NDkxLCwxNTQyMTk0MTEzMDI5LCxodHRwczovL3N0YXRpYy53b3NoaXBtLmNvbS9XWF9VXzIwMTgwNV8yMDE4MDUyMjE2MTcxN180OTQ0LmpwZz9pbWFnZVZpZXcyLzIvdy84MCwsJUU1JUE0JUE3JUU4JTk5JUJF; Hm_lvt_b85cbcc76e92e3fd79be8f2fed0f504f=1547467553,1547544101,1547874937,1547952696; Hm_lpvt_b85cbcc76e92e3fd79be8f2fed0f504f=1547953708'
12 }
13for page_number in range(1, 549):
14page_url = "[http://www.woshipm.com/category/pmd/page/](http://www.woshipm.com/category/pmd/page/){}".format(page_number)
15print('正在抓取第' + str(page_number) + '頁>>>')
16response = requests.get(url=page_url, headers=headers)
Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這里是Python學習者的聚集地,零基礎,進階,都歡迎

頁面連鏈接構造完之后我們可以開始爬取文章詳情頁,提取所需要的信息,在這里用到的解析庫是BeautifulSoup,整個爬蟲非常簡單,

完整代碼如下:


<1#!/usr/bin/env python
2# -*- encoding: utf-8 -*-
3
4import requests
5from bs4 import BeautifulSoup
6import csv
7
8headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
9 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
10 'Cache-Control': 'max-age=0',
11 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
12 'Connection': 'keep-alive',
13 'Host': '[www.woshipm.com'](http://www.woshipm.com'),
14 'Cookie' : 't=MHpOYzlnMmp6dkFJTEVmS3pDeldrSWRTazlBOXpkRjBzRXpZOU4yVkNZWWl5QVhMVXBjMU5WcnpwQ2NCQS90ZkVsZ3lTU2Z0T3puVVZFWFRFOXR1TnVrbUV2UFlsQWxuemY4NG1wWFRYMENVdDRPQ1psK0NFZGJDZ0lsN3BQZmo%3D; s=Njg4NDkxLCwxNTQyMTk0MTEzMDI5LCxodHRwczovL3N0YXRpYy53b3NoaXBtLmNvbS9XWF9VXzIwMTgwNV8yMDE4MDUyMjE2MTcxN180OTQ0LmpwZz9pbWFnZVZpZXcyLzIvdy84MCwsJUU1JUE0JUE3JUU4JTk5JUJF; Hm_lvt_b85cbcc76e92e3fd79be8f2fed0f504f=1547467553,1547544101,1547874937,1547952696; Hm_lpvt_b85cbcc76e92e3fd79be8f2fed0f504f=1547953708'
15 }
16with open('data.csv', 'w', encoding='utf-8',newline='') as csvfile:
17 fieldnames = ['title', 'author', 'author_des', 'date', 'views', 'loves', 'zans', 'comment_num','art', 'url']
18 writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
19 writer.writeheader()
20 for page_number in range(1, 549):
21 page_url = "[http://www.woshipm.com/category/pmd/page/](http://www.woshipm.com/category/pmd/page/){}".format(page_number)
22 print('正在抓取第' + str(page_number) + '頁>>>')
23 response = requests.get(url=page_url, headers=headers)
24 if response.status_code == 200:
25 page_data = response.text
26 if page_data:
27 soup = BeautifulSoup(page_data, 'lxml')
28 article_urls = soup.find_all("h3", class_="post-title")
29 for item in article_urls:
30
31 url = item.find('a').get('href')
32 # 文章頁面解析,獲取文章標題、作者、作者簡介、日期、瀏覽量、收藏量、點贊量、評論量、正文、文章鏈接
33 response = requests.get(url=url, headers=headers)
34 # time.sleep(3)
35 print('正在抓取:' + url)
36 # print(response.status_code)
37 if response.status_code == 200:
38 article = response.text
39 # print(article)
40 if article:
41 try:
42 soup = BeautifulSoup(article, 'lxml')
43 # 文章標題
44 title = soup.find(class_='article-title').get_text().strip()
45 # 作者
46 author = soup.find(class_='post-meta-items').find_previous_siblings()[1].find('a').get_text().strip()
47 # 作者簡介
48 author_des = soup.find(class_='post-meta-items').find_previous_siblings()[0].get_text().strip()
49 # 日期
50 date = soup.find(class_='post-meta-items').find_all(class_='post-meta-item')[0].get_text().strip()
51 # 瀏覽量
52 views = soup.find(class_='post-meta-items').find_all(class_='post-meta-item')[1].get_text().strip()
53 # 收藏量
54 loves = soup.find(class_='post-meta-items').find_all(class_='post-meta-item')[2].get_text().strip()
55 # 點贊量
56 zans = soup.find(class_='post-meta-items').find_all(class_='post-meta-item')[3].get_text().strip()
57 # 評論量
58 comment = soup.find('ol', class_="comment-list").find_all('li')
59 comment_num = len(comment)
60 # 正文
61 art = soup.find(class_="grap").get_text().strip()
62
63 writer.writerow({'title':title, 'author':author, 'author_des':author_des, 'date':date, 'views':views, 'loves':int(loves), 'zans':int(zans), 'comment_num':int(comment_num), 'art':art, 'url':url})
64 print({'title':title, 'author':author, 'author_des':author_des, 'date':date, 'views':views, 'loves':loves, 'zans':zans, 'comment_num':comment_num})
65 except:
66 print('抓取失敗')
67 print("抓取完畢!")

在這里說一點,評論數的爬取,觀察文章詳情頁你可以發現并沒有評論數,我這里是直接計算出來的,可以看到評論是嵌套在ol里面,抓起所有的li,然后就可以計算出,代碼如下:

1 # 評論量
2 comment = soup.find('ol', class_="comment-list").find_all('li')
3 comment_num = len(comment)

這樣,我們運行一下爬蟲就能夠順利爬取 594 頁的結果了,我這里一共抓取了 6574 條結果,大概也就玩了兩把吃雞就抓完了。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

以上,就完成了數據的獲取。有了數據我們就可以著手分析,不過這之前還需簡單地進行一下數據的清洗、處理。

3. 數據清洗處理

首先,我們需要把csv文件轉換為 DataFrame。


1# 將csv數據轉為dataframe
2csv_file = "data.csv"
3csv_data = pd.read_csv(csv_file, low_memory=False) # 防止彈出警告
4csv_df = pd.DataFrame(csv_data)
5print(csv_df)

下面我們看一下數據的總體情況,可以看到數據的維度是 6574 行 × 10 列。需要將 views 列更改為數值格式、date 列更改為日期格式。


1print(csv_df.shape) # 查看行數和列數
2print(csv_df.info()) # 查看總體情況
3print(csv_df.head()) # 輸出前5行
4#運行結果
5(6574, 10)
6<class 'pandas.core.frame.DataFrame'>
7RangeIndex: 6574 entries, 0 to 6573
8Data columns (total 10 columns):
9title 6574 non-null object
10author 6574 non-null object
11author_des 6135 non-null object
12date 6574 non-null object
13views 6574 non-null object
14loves 6574 non-null int64
15zans 6574 non-null int64
16comment_num 6574 non-null int64
17art 6574 non-null object
18url 6574 non-null object
19dtypes: int64(3), object(7)
20memory usage: 513.7+ KB
21None
22 title ... url
230 2018,我產品生涯的第二年是這樣度過的 ... [http://www.woshipm.com/pmd/1863343.html](http://www.woshipm.com/pmd/1863343.html)
241 從《啥是佩奇》提煉出的產品三部曲 ... [http://www.woshipm.com/pmd/1860832.html](http://www.woshipm.com/pmd/1860832.html)
252 “采坑,填坑”,項目的那些事兒(第六階段:測試驗收) ... [http://www.woshipm.com/pmd/1859168.html](http://www.woshipm.com/pmd/1859168.html)
263 如何成為CEO信任的產品經理? ... [http://www.woshipm.com/pmd/1857656.html](http://www.woshipm.com/pmd/1857656.html)
274 如何讓程序員放下手中的刀? ... [http://www.woshipm.com/pmd/1858879.html](http://www.woshipm.com/pmd/1858879.html)
28
29[5 rows x 10 columns]

date列更改為日期非常簡單,代碼如下:


1# 修改date列時間,并轉換為 datetime 格式
2csv_df['date'] = pd.to_datetime(csv_df['date'])

views列處理思路是增加一列,名字就叫views_num吧,我們可以觀察到views列有的數值是整數,有的則是1.7萬這種,代碼如下:


1#!/usr/bin/env python
2# -*- encoding: utf-8 -*-
3
4import pandas as pd
5import numpy as np
6import matplotlib.pyplot as plt
7import seaborn as sns
8import re
9from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
10import jieba
11import os
12from PIL import Image
13from os import path
14from decimal import *
15
16#views列處理
17def views_to_num(item):
18 m = re.search('.*?(萬)',item['views'])
19 if m:
20 ns = item['views'][:-1]
21 nss = Decimal(ns)*10000
22 else:
23 nss = item['views']
24 return int(nss)
25
26# 數據清洗處理
27def parse_woshipm():
28 # 將csv數據轉為dataframe
29 csv_file = "data.csv"
30 csv_data = pd.read_csv(csv_file, low_memory=False) # 防止彈出警告
31 csv_df = pd.DataFrame(csv_data)
32 # print(csv_df.shape) # 查看行數和列數
33 # print(csv_df.info()) # 查看總體情況
34 # print(csv_df.head()) # 輸出前5行
35
36 # 修改date列時間,并轉換為 datetime 格式
37 csv_df['date'] = pd.to_datetime(csv_df['date'])
38 #將views字符串數字化,增加一列views_num
39 csv_df['views_num'] = csv_df.apply(views_to_num,axis = 1)
40 print(csv_df.info())
41
42
43if **name** == '**main**':
44 parse_woshipm()

我們再輸出一下看看各列數據類型:


1<class 'pandas.core.frame.DataFrame'>
2RangeIndex: 6574 entries, 0 to 6573
3Data columns (total 11 columns):
4title 6574 non-null object
5author 6574 non-null object
6author_des 6135 non-null object
7date 6574 non-null datetime64[ns]
8views 6574 non-null object
9loves 6574 non-null int64
10zans 6574 non-null int64
11comment_num 6574 non-null int64
12art 6574 non-null object
13url 6574 non-null object
14views_num 6574 non-null int64
15dtypes: datetime64[ns](1), int64(4), object(6)
16memory usage: 565.0+ KB
17None

可以看到數據類型已經變成我們想要的了, 下面,我們看一下數據是否有重復,如果有,那么需要刪除。


1# 判斷整行是否有重復值,如果運行結果為True,表明有重復值
2# print(any(csv_df.duplicated()))
3# 顯示True,表明有重復值,進一步提取出重復值數量
4data_duplicated = csv_df.duplicated().value_counts()
5# print(data_duplicated)
6#運行結果
7# True
8# False
9# 6562
10# True
11# 12
12# dtype: int64
13# 刪除重復值
14data = csv_df.drop_duplicates(keep='first')
15# 刪除部分行后,index中斷,需重新設置index
16data = data.reset_index(drop=True)

然后,我們再增加兩列數據,一列是文章標題長度列,一列是年份列,便于后面進行分析。


1#增加標題長度列和年份列
2data['title_length'] = data['title'].apply(len)
3data['year'] = data['date'].dt.year

以上,就完成了基本的數據清洗處理過程,針對這些數據可以開始進行分析了。

4. 描述性數據分析

通常,數據分析主要分為四類: 「描述型分析」、「診斷型分析」「預測型分析」「規范型分析」。「描述型分析」是用來概括、表述事物整體狀況以及事物間關聯、類屬關系的統計方法,是這四類中最為常見的數據分析類型。通過統計處理可以簡潔地用幾個統計值來表示一組數據地集中性(如平均值、中位數和眾數等)和離散型(反映數據的波動性大小,如方差、標準差等)。

這里,我們主要進行描述性分析,數據主要為數值型數據(包括離散型變量和連續型變量)和文本數據。

4.1. 總體情況

先來看一下總體情況,使用了data.describe() 方法對數值型變量進行統計分析。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

mean 表示平均值,std表示標準差,從上面可以簡要得出以下幾個結論:

  • 產品經理熱愛學習,看到好的文章就收藏下來。75%的文章收藏量破百,50%的文章瀏覽量破百;
  • 產品話少,對別人的文章很少會評頭論足。文章的評論數都寥寥無幾。
  • 產品不愿意承認別人比自己優秀。絕大部分文章點贊數都是一二十個,所以程序猿們以后不要在產品面前吹噓技術如何了得了,產品是不會承認你厲害的。

對于非數值型變量(author、date),使用 describe() 方法會產生另外一種匯總統計。


1print(data['author'].describe())
2print(data['date'].describe())
3#結果
4count 6562
5unique 1531
6top Nairo
7freq 315
8Name: author, dtype: object
9count 6562
10unique 1827
11top 2015-01-29 00:00:00
12freq 16
13first 2012-11-25 00:00:00
14last 2019-01-21 00:00:00
15Name: date, dtype: object
Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這里是Python學習者的聚集地,零基礎,進階,都歡迎

unique 表示唯一值數量,top 表示出現次數最多的變量,freq 表示該變量出現的次數,所以可以簡單得出以下幾個結論:

  • 一共有1531位作者為社區的產品經理欄目貢獻了文章,其中貢獻量最大的作者叫 Nairo ,貢獻了315篇;
  • 在2015年1月29日欄目文章發布數最大,達到了16篇。欄目第一篇文章發布在2012年11月25日。

4.2. 不同時期文章發布的數量變化

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

從圖中可以看到,網站文章發布數量在2012到2015年逐年遞增,增幅很大,這可能與網站的知名度提高有關;2015年2季度之后比較平穩。后面的分析代碼就不一一貼出,文末會留下代碼下載鏈接。

4.3. 文章瀏覽量 TOP10

接下來,到了我們比較關心的問題:幾萬篇文章里,到底哪些文章寫得比較好或者比較火

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

這里以閱讀量作為衡量標準,排在第一的是《 小白產品經理看產品:什么是互聯網產品》,第一名的瀏覽量遙遙領先于第二名,接近百萬,看來很多社區里面很多都是產品小白。而且看這幾篇文章標題,貌似都是介紹什么是產品經理,產品經理干什么,看來社區里面初級產品挺多的。

4.4. 歷年文章收藏量 TOP3

在了解文章的總體排名之后,我們來看看歷年的文章排名是怎樣的。這里,每年選取了收藏量最多的 3 篇文章。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

從圖中可以看出,2015年是的那篇文章收藏量是最多的,達到了2000,文章內容則是后臺產品設計,看來這篇文章里面干貨滿滿。

4.4.1. 最高產作者 TOP20

上面,我們從收藏量指標進行了分析,下面,我們關注一下發布文章的作者。前面提到發文最多的是Nairo,貢獻了315篇,這里我們看看還有哪些比較高產的作者。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

可以看到第一名遙遙領先,是個狼人,大家可以關注一下這些優質作者。

4.4.2. 平均文章收藏量最多作者 TOP 10

我們關注一個作者除了是因為文章高產以外,可能更看重的是其文章水準。這里我們選擇「文章平均收藏量」(總收藏量/文章數)這個指標,來看看文章水準比較高的作者是哪些人。這里,為了避免出現「某作者只寫了一篇高收藏率的文章」這種不能代表其真實水準的情況,我們將篩選范圍定在至少發布過 5 篇文章的作者們。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

對比這張圖和前面的發文數量排行榜,我們可以發現這張圖的作者均沒有上榜,相比于數量,質量可能更重要吧。

4.5. 文章評論數最多 TOP10

說完了收藏量。下面,我們再來看看評論數量最多的文章是哪些。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

我們可以看到大部分都與初級產品有關,而且我們可以看到評論多,收藏量也挺多的,我們進一步探尋兩者之間關系。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

我們可以發現絕大部分文章評論數和收藏量都很小。

4.6. 文章標題長度

下面,我們再來看看文章標題的長度和閱讀量之間有沒有什么關系。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

我們可以看到文章標題長度在20左右時閱讀量普遍較高。

4.7. 文本分析

最后,我們從這 5 萬篇文章中的正文內容中看看產品經理都在看什么。

Python爬蟲新手教程:爬取了6574篇文章,告訴你產品經理在看什么!

我們可以看到設計、工作、數據、功能、需求、項目等都是產品經理們關注的東西,產品們也很辛苦啊,程序猿以后不要吐槽自己多辛苦了。

5. 小結

  • 本文簡要分析了人人都是產品經理產品經理欄目下6574篇文章信息,大致了解了產品經理都在看什么。
  • 發掘了那些優秀的文章和作者,能夠產品新人指明方向。
  • 告訴了程序猿與產品經理聊天時該說什么。
  • 本文尚未做深入的文本挖掘,而文本挖掘可能比數據挖掘涵蓋的信息量更大,更有價值。進行這些分析需要機器學習和深度學習的知識。
向AI問一下細節

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

AI

南康市| 阜宁县| 河间市| 樟树市| 商水县| 南投县| 兴业县| 松滋市| 稷山县| 昭通市| 嘉定区| 洛浦县| 南城县| 资中县| 右玉县| 桂平市| 两当县| 乾安县| 长武县| 迁安市| 张家港市| 兰溪市| 八宿县| 闻喜县| 远安县| 大渡口区| 洛南县| 买车| 日喀则市| 福贡县| 临湘市| 南宁市| 济南市| 池州市| 盐津县| 洛宁县| 平陆县| 东兴市| 高阳县| 曲水县| 武义县|