一、主題式網路爬蟲設計方案
1.主題式網路爬蟲名稱:爬取網易雲**歌單
2.主題式網路爬蟲爬取的內容與資料特徵分析
3.主題式網路爬蟲設計方案概述(包括實現思路與技術難點)
實現思路:使用單執行緒爬取,初始化資訊,設定請求頭部資訊,獲取網頁資源,使用etree進行網頁解析,爬取多頁時重新整理offset,將爬取資料儲存到csv檔案中。
難點:使用的翻頁形式為url的limit和offset引數,傳送的get請求時froms和url的引數要一至。
第一步:找ip資源
ip資源並不豐富,換句話說是供不應求的,因此一般是使用動態ip。
免費方法,直接在網路上找,在搜尋引擎中一搜尋特別多能夠提供ip資源的**,進行採集即可。
付費方法,通過購買芝麻**上的ip資源,並進行提取,搭建ip池。
1.資料爬取與採集
from urllib import parse
from lxml import etree
from urllib3 import disable_warnings
import requests
import csv
class
wangyiyun
(object):
def __init__
(self,
**kwargs)
: # 歌單的歌曲風格
self.types = kwargs[
'types'
] # 歌單的發布型別
self.years = kwargs[
'years'
] # 這是當前爬取的頁數
self.pages = pages
# 這是請求的url引數(頁數)
self.limit =
35 self.offset =
35* self.pages - self.limit
# 這是請求的url
self.url =
""# 設定請求頭部資訊(可擴充套件:不同的user - agent)
def set_header
(self)
: self.header =
return self.header
# 設定請求**資訊
def set_froms
(self)
: self.key = parse.
quote
(self.types)
self.froms =
return self.froms
# 解析**,獲取有用的資料
def parsing_codes
(self)
: page = etree.
html
(self.code)
# 標題
self.title = page.
xpath
('//div[@class="u-cover u-cover-1"]/a[@title]/@title'
) # 作者
self.author = page.
xpath
('//p/a[@class="nm nm-icn f-thide s-fc3"]/text()'
) # 閱讀量
self.listen = page.
xpath
('//span[@class="nb"]/text()'
) # 歌單鏈結
self.link = page.
xpath
('//div[@class="u-cover u-cover-1"]/a[@href]/@href'
) # 將資料儲存為csv檔案
data=
list
(zip
(self.title,self.author,self.listen,self.link)
) with open
('yinyue.csv'
,'a'
,encoding=
'utf-8'
,newline=
'') as f:
writer=csv.
writer
(f)#writer.writerow(header)
writer.
writerows
(data)
# 獲取網頁源**
def get_code
(self)
:disable_warnings()
self.froms[
'cat'
]=self.types
disable_warnings()
self.new_url = self.url+parse.
urlencode
(self.froms)
self.code = requests.
get(
url = self.new_url,
headers = self.header,
data = self.froms,
verify = false,
).text
# 爬取多頁時重新整理offset
def multi
(self ,page)
: self.offset = self.limit * page - self.limit
if __name__ ==
'__main__'
: # 歌單的歌曲風格
types =
"說唱"
# 歌單的發布型別:最熱=hot,最新=
new years =
"hot"
# 指定爬取的頁數
pages =
10 # 通過pages變數爬取指定頁面
music =
wangyiyun
( types = types,
years = years,
)for i in range
(pages)
: page = i+
1 # 因為沒有第0頁
music.
multi
(page) # 爬取多頁時指定,傳入當前頁數,重新整理offset
music.
set_header
() # 呼叫頭部方法,構造請求頭資訊
music.
set_froms
() # 呼叫froms方法,構造froms資訊
music.
get_code
() # 獲取當前頁面的原始碼
music.
parsing_codes
() # 處理原始碼,獲取指定資料
資料分析與視覺化:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
plt.
hist
(data[
'listen_num'
],bins=50)
plt.
show
()
#繪製餅狀圖
plt.rcparams[
'font.sans-serif']=
['simhei'
]#解決亂碼問題
df_score = data[
'listen_num'].
value_counts
() #統計評分情況
plt.
title
() #設定餅圖標題
plt.
pie(df_score.values,labels = df_score.index,autopct=
'%1.1f%%'
) #繪圖
#autopct表示圓裡面的文字格式,在python裡%操作符可用於格式化字串操作
plt.
show
()
爬取網易雲歌單
偶爾在微博上看到,要是歌單裡誰的歌超過30首,那肯定是真愛吧。我看了連忙開啟網易雲 我的歌單,結果1000多首歌。這讓我自己數得數到猴年馬月呀.於是萌生出了寫一段小爬蟲來統計的想法。剛開始想直接解析網頁元素,後發現很麻煩,很多資訊不能一次抓取到,於是找到網頁請求的介面,結果介面有加密引數,看了一下j...
爬取網易雲歌單標籤
import reimport urllib.request import urllib.error import urllib.parse import jieba defget all hotsong url headers request urllib.request.request url ...
爬網易雲歌單
學習爬蟲嘛,就是批量獲取目標 上內容。首先需要知道目標 的url,尤其是需要獲取目標 裡面子鏈結中的內容時,需要先批量獲取所有子鏈結的url。其次是從大量的資訊中提取並整理自己想要的資訊。是不是很簡單 一般用beautiful soup 庫,專門用來提取網頁的資料,用作爬蟲 很好用。beautifu...