反爬蟲爬取網易雲歌單

2021-10-05 14:39:09 字數 4190 閱讀 4372

一、主題式網路爬蟲設計方案

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...