国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python爬蟲學(xué)習(xí)教程,爬取網(wǎng)易云音樂!

ningwang / 1858人閱讀

摘要:其次,使用后,還需要針對做特定處理??吹竭@就可以構(gòu)想一下爬蟲的爬取邏輯了。

運(yùn)行環(huán)境

我的運(yùn)行環(huán)境如下:

系統(tǒng)版本

Windows10。

Python版本

Python3.5,推薦使用Anaconda 這個(gè)科學(xué)計(jì)算版本,主要是因?yàn)樗詭б粋€(gè)包管理工具,可以解決有些包安裝錯(cuò)誤的問題。去Anaconda官網(wǎng),選擇Python3.5版本,然后下載安裝。

IDE

我使用的是PyCharm,是專門為Python開發(fā)的IDE。這是JetBrians的產(chǎn)品

實(shí)戰(zhàn)

上面提到過,網(wǎng)易云音樂的網(wǎng)頁跟普通的網(wǎng)頁相比主要有兩點(diǎn)不同:

網(wǎng)頁是 js 動(dòng)態(tài)加載的

使用了iframe框架

所以,

首先,網(wǎng)頁請求不能使用requests庫,需要使用Selenium + PhatomJS。

其次,使用Selenium + PhatomJS后,還需要針對 iframe 做特定處理。

廢話不多說,看實(shí)際操作步驟:

廢話不多說,看實(shí)際操作步驟:
首先打開網(wǎng)頁 http://music.163.com

在右上角的搜索框中輸入“The Beatles”,然后會(huì)有一個(gè)下拉選項(xiàng),選擇歌手 The Beatles (紅框中的內(nèi)容)。

然后看到如下頁面,選擇紅框中的“所有專輯”,點(diǎn)擊。

這樣就會(huì)看見所有的專輯列表,以及下方的翻頁按鈕。

我們需要的就是所有專輯的圖片、專輯名和專輯出版時(shí)間。看到這就可以構(gòu)想一下爬蟲的爬取邏輯了。定位到該頁面,然后獲取頁碼,然后挨個(gè)請求頁面來爬取頁面中的內(nèi)容。

點(diǎn)擊一下翻頁按鈕看看url 有沒有什么規(guī)律。

點(diǎn)擊第二頁后,看到上面的地址欄?。。】吹竭@個(gè)地址欄我都懶得翻頁了。。。

limit 參數(shù)是限制一個(gè)頁面加載專輯的個(gè)數(shù)

offset 參數(shù)是前面過濾多少個(gè)專輯,現(xiàn)在是一頁12個(gè)專輯,所以第二頁是offset=12,第三頁offset=24,以此類推。。。

一共9頁,一頁12個(gè),也不到120個(gè)。So... ... 改一下url 就不用翻頁了??!

limit 參數(shù)等于120,offset 參數(shù) 等于0,就搞定了!輸入下面的url,看看是不是所有的專輯都加載出來了。

http://music.163.com/#/artist/album?id=101988&limit=120&offset=0

下面就開始爬蟲代碼了。
這里我們會(huì)用到上一篇博文中寫好的幾個(gè)工具方法:

"""
在學(xué)習(xí)過程中有什么不懂得可以加我的
python學(xué)習(xí)交流扣扣qun,934109170
群里有不錯(cuò)的學(xué)習(xí)教程、開發(fā)工具與電子書籍。
與你分享python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)好python,和學(xué)習(xí)什么內(nèi)容。
"""
    def save_img(self, url, file_name): ##保存圖片
        print("開始請求圖片地址,過程會(huì)有點(diǎn)長...")
        img = self.request(url)
        print("開始保存圖片")
        f = open(file_name, "ab")
        f.write(img.content)
        print(file_name,"圖片保存成功!")
        f.close()
 
    def request(self, url):  #封裝的requests 請求
        r = requests.get(url)  # 像目標(biāo)url地址發(fā)送get請求,返回一個(gè)response對象。有沒有headers參數(shù)都可以。
        return r
 
    def mkdir(self, path):  ##這個(gè)函數(shù)創(chuàng)建文件夾
        path = path.strip()
        isExists = os.path.exists(path)
        if not isExists:
            print("創(chuàng)建名字叫做", path, "的文件夾")
            os.makedirs(path)
            print("創(chuàng)建成功!")
            return True
        else:
            print(path, "文件夾已經(jīng)存在了,不再創(chuàng)建")
            return False
 
    def get_files(self, path): #獲取文件夾中的文件名稱列表
        pic_names = os.listdir(path)
        return pic_names

OK, 開始我們的爬蟲邏輯部分:

這里值得注意的是,該頁面使用frame 框架,使用Selenium + PhantomJS 后并不會(huì)加載iframe 框架中的網(wǎng)頁內(nèi)容。iframe 框架相當(dāng)于在頁面中又加載了一個(gè)頁面,需要使用Selenium 的 switch_to.frame() 方法加載(官網(wǎng)給的方法是switch_to_frame(),但是IDE提醒使用前面的方法替代該方法)。

看下面的網(wǎng)頁結(jié)構(gòu),iframe的id是“g_iframe”:

加載 iframe 框架中的內(nèi)容:

driver = webdriver.PhantomJS()
driver.get(self.init_url)
driver.switch_to.frame("g_iframe")
html = driver.page_source

然后找到所有的封面元素:

根據(jù)上圖的網(wǎng)頁結(jié)構(gòu)可以看出,所有的專輯信息都在ul 標(biāo)簽里面,每一個(gè)專輯在一個(gè)li 標(biāo)簽里。li 標(biāo)簽中包含了圖片url、專輯名字、以及專輯時(shí)間。

抓取其中的內(nèi)容就好了。

all_li = BeautifulSoup(html, "lxml").find(id="m-song-module").find_all("li")
 
for li in all_li:
    album_img = li.find("img")["src"]
    album_name = li.find("p", class_="dec")["title"]
    album_date = li.find("span", class_="s-fc3").get_text()

這里獲取到的圖片url 依然是有圖片寬高參數(shù)的,所以要過濾寬高參數(shù):
http://p4.music.126.net/pLA1G...

把問號后面的參數(shù)過濾掉:

end_pos = album_img.index("?")  #找到問號的位置
album_img_url = album_img[:end_pos]  #截取問號之前的內(nèi)容

圖片命名邏輯:專輯時(shí)間 + 專輯名。

專輯名可能有一些特殊字符,需要替換掉!

photo_name = album_date + " - " + album_name.replace("/","").replace(":",",") + ".jpg"

再使用上一篇博文例子中的去重邏輯,修改后的爬蟲邏輯部分如下:

def spider(self):
        print("Start!")
        driver = webdriver.PhantomJS()
        driver.get(self.init_url)
        driver.switch_to.frame("g_iframe")
        html = driver.page_source
 
        self.mkdir(self.folder_path)  # 創(chuàng)建文件夾
        print("開始切換文件夾")
        os.chdir(self.folder_path)  # 切換路徑至上面創(chuàng)建的文件夾
 
        file_names = self.get_files(self.folder_path)  # 獲取文件夾中的所有文件名,類型是list
 
        all_li = BeautifulSoup(html, "lxml").find(id="m-song-module").find_all("li")
        # print(type(all_li))
 
        for li in all_li:
            album_img = li.find("img")["src"]
            album_name = li.find("p", class_="dec")["title"]
            album_date = li.find("span", class_="s-fc3").get_text()
            end_pos = album_img.index("?")
            album_img_url = album_img[:end_pos]
 
            photo_name = album_date + " - " + album_name.replace("/","").replace(":",",") + ".jpg"
            print(album_img_url, photo_name)
 
            if photo_name in file_names:
                print("圖片已經(jīng)存在,不再重新下載")
            else:
                self.save_img(album_img_url, photo_name)

其實(shí)相對于上篇博文的例子,這個(gè)爬蟲的邏輯部分還是挺簡潔的。

from selenium import webdriver
from bs4 import BeautifulSoup
import requests
import os
class AlbumCover():
 
    def __init__(self):
        self.init_url = "http://music.163.com/#/artist/album?id=101988&limit=120&offset=0" #請求網(wǎng)址
        self.folder_path = "C:DTheBeatles" #想要存放的文件目錄
 
    def save_img(self, url, file_name):  ##保存圖片
        print("開始請求圖片地址,過程會(huì)有點(diǎn)長...")
        img = self.request(url)
        print("開始保存圖片")
        f = open(file_name, "ab")
        f.write(img.content)
        print(file_name, "圖片保存成功!")
        f.close()
 
    def request(self, url):  # 封裝的requests 請求
        r = requests.get(url)  # 像目標(biāo)url地址發(fā)送get請求,返回一個(gè)response對象。有沒有headers參數(shù)都可以。
        return r
 
    def mkdir(self, path):  ##這個(gè)函數(shù)創(chuàng)建文件夾
        path = path.strip()
        isExists = os.path.exists(path)
        if not isExists:
            print("創(chuàng)建名字叫做", path, "的文件夾")
            os.makedirs(path)
            print("創(chuàng)建成功!")
            return True
        else:
            print(path, "文件夾已經(jīng)存在了,不再創(chuàng)建")
            return False
 
    def get_files(self, path):  # 獲取文件夾中的文件名稱列表
        pic_names = os.listdir(path)
        return pic_names
 
    def spider(self):
        print("Start!")
        driver = webdriver.PhantomJS()
        driver.get(self.init_url)
        driver.switch_to.frame("g_iframe")
        html = driver.page_source
 
        self.mkdir(self.folder_path)  # 創(chuàng)建文件夾
        print("開始切換文件夾")
        os.chdir(self.folder_path)  # 切換路徑至上面創(chuàng)建的文件夾
 
        file_names = self.get_files(self.folder_path)  # 獲取文件夾中的所有文件名,類型是list
 
        all_li = BeautifulSoup(html, "lxml").find(id="m-song-module").find_all("li")
        # print(type(all_li))
 
        for li in all_li:
            album_img = li.find("img")["src"]
            album_name = li.find("p", class_="dec")["title"]
            album_date = li.find("span", class_="s-fc3").get_text()
            end_pos = album_img.index("?")
            album_img_url = album_img[:end_pos]
 
            photo_name = album_date + " - " + album_name.replace("/", "").replace(":", ",") + ".jpg"
            print(album_img_url, photo_name)
 
            if photo_name in file_names:
                print("圖片已經(jīng)存在,不再重新下載")
            else:
                self.save_img(album_img_url, photo_name)
 
album_cover = AlbumCover()
album_cover.spider()

執(zhí)行結(jié)果:

看看文件夾里面什么樣:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/45157.html

相關(guān)文章

  • python爬蟲學(xué)習(xí)教程,爬取網(wǎng)易音樂

    摘要:其次,使用后,還需要針對做特定處理??吹竭@就可以構(gòu)想一下爬蟲的爬取邏輯了。 運(yùn)行環(huán)境 我的運(yùn)行環(huán)境如下: 系統(tǒng)版本 Windows10。 Python版本 Python3.5,推薦使用Anaconda 這個(gè)科學(xué)計(jì)算版本,主要是因?yàn)樗詭б粋€(gè)包管理工具,可以解決有些包安裝錯(cuò)誤的問題。去Anaconda官網(wǎng),選擇Python3.5版本,然后下載安裝。 IDE 我使用的是PyCharm,是專...

    Olivia 評論0 收藏0
  • 小白都懂的Python爬蟲網(wǎng)易音樂下載

    摘要:完整代碼如下正在下載根據(jù)網(wǎng)易云歌曲的直接下載歌曲上安裝爬取網(wǎng)易云歌曲源碼地址 首發(fā)知乎:https://zhuanlan.zhihu.com/p/... 目標(biāo) 偶然的一次機(jī)會(huì)聽到了房東的貓的《云煙成雨》,瞬間迷上了這慵懶的嗓音和學(xué)生氣的歌詞,然后一直去循環(huán)聽她們的歌。然后還特意去刷了動(dòng)漫《我是江小白》,好期待第二季... 我多想在見你,哪怕匆匆一眼就別離... 好了,不說廢話了。這次...

    SoapEye 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • Python 從零開始爬蟲(七)——實(shí)戰(zhàn):網(wǎng)易音樂評論爬取(附加密算法)

    摘要:通常這種加密都是通過加密的,所以首先要找到這個(gè)有加密算法的。追蹤函數(shù),發(fā)現(xiàn)它指向一個(gè)叫的函數(shù),仔細(xì)研究許久后大概知道加密算法經(jīng)兩次加密獲得,模式為,偏移量為。 前言 某寶評論區(qū)已經(jīng)成功爬取了,jd的也是差不多的方法,說實(shí)話也沒什么好玩的,我是看上它們分析簡單,又沒加密才拿來試手的。如果真的要看些有趣的評論的話,我會(huì)選擇網(wǎng)易云音樂,里面匯聚了哲學(xué)家,小說家,story-teller,皮皮...

    plus2047 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<