主頁(yè) > 知識(shí)庫(kù) > Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單

Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單

熱門(mén)標(biāo)簽:400電話在線如何申請(qǐng) 智能電話機(jī)器人調(diào)研 江門(mén)智能電話機(jī)器人 天津塘沽區(qū)地圖標(biāo)注 滴滴地圖標(biāo)注公司 甘肅高頻外呼系統(tǒng) 如何申請(qǐng)400電話代理 地圖標(biāo)注可以遠(yuǎn)程操作嗎 杭州房產(chǎn)地圖標(biāo)注

此貨很干,跟上腳步!!!
Cookie
cookie是什么東西?
小餅干?能吃嗎?
簡(jiǎn)單來(lái)說(shuō)就是你第一次用賬號(hào)密碼訪問(wèn)服務(wù)器
服務(wù)器在你本機(jī)硬盤(pán)上設(shè)置一個(gè)身份識(shí)別的會(huì)員卡(cookie)
下次再去訪問(wèn)的時(shí)候只要亮一下你的卡片(cookie)
服務(wù)器就會(huì)知道是你來(lái)了,因?yàn)槟愕馁~號(hào)密碼等信息已經(jīng)刻在了會(huì)員卡上
需求分析
爬蟲(chóng)要訪問(wèn)一些私人的數(shù)據(jù)就需要用cookie進(jìn)行偽裝
想要得到cookie就得先登錄,爬蟲(chóng)可以通過(guò)表單請(qǐng)求將賬號(hào)密碼提交上去
但是在火狐的F12截取到的數(shù)據(jù)就是,
網(wǎng)易云音樂(lè)先將你的賬號(hào)密碼給編了碼,再發(fā)post請(qǐng)求
所以我們?cè)跍?zhǔn)備表單數(shù)據(jù)的時(shí)候就已經(jīng)被卡住了
這時(shí)候我們就可以使用自動(dòng)化測(cè)試Selenium幫助我們?nèi)サ卿?br /> 登錄好之后就獲取cookie給爬蟲(chóng)使用

OK,廢話也廢話完了,直接開(kāi)整吧!!
首先跟我創(chuàng)建一個(gè)爬蟲(chóng)項(xiàng)目和爬蟲(chóng)
在cmd創(chuàng)建

用Pycharm打開(kāi)這個(gè)項(xiàng)目

首先修改配置文件setting.py
1.關(guān)閉機(jī)器人協(xié)議
2.取消禁用cookie的功能

現(xiàn)在就回到爬蟲(chóng)文件wyySpider.py準(zhǔn)備前期的工作
修改start_urls里的網(wǎng)址準(zhǔn)備一個(gè)請(qǐng)求頭
首先用火狐瀏覽器打開(kāi)網(wǎng)易云音樂(lè),登錄后進(jìn)入到個(gè)人主頁(yè)


在爬蟲(chóng)代碼那里準(zhǔn)備一下,修改一下start_urls

import scrapy
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

class WyyspiderSpider(scrapy.Spider):
  name = 'wyySpider'
  allowed_domains = ['163.com']
  start_urls = ['https://music.163.com/playlist?id=19xxxxx7']

先實(shí)現(xiàn)一下自動(dòng)登錄功能獲取cookie
首先導(dǎo)一下自動(dòng)化測(cè)試的包(Selenium)
沒(méi)有這個(gè)包的話去控制臺(tái):pip --default-timeout=100 install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

導(dǎo)完包還要一個(gè)谷歌的驅(qū)動(dòng)程序,先看一下自己的谷歌版本

到這網(wǎng)站下載相同版本的驅(qū)動(dòng)程序:https://sites.google.com/a/chromium.org/chromedriver/home

如果版本跟我的一樣可以去網(wǎng)盤(pán)下載:
鏈接: https://pan.baidu.com/s/1M-gME2R8EEhEoFlPaDhbmA 提取碼: 7iai

解壓后記住這個(gè)驅(qū)動(dòng)的位置,在爬蟲(chóng)文件寫(xiě)一個(gè)獲取cookie的函數(shù)
以下代碼的坐標(biāo)不一定適合各位的電腦,不過(guò)給你們安利個(gè)物理外掛(電腦微信截圖Alt+A)

 def getCookie(self):
    # 獲取谷歌的驅(qū)動(dòng),參數(shù)為剛剛驅(qū)動(dòng)程序的位置
    driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")
    # -----------------selenium自動(dòng)登錄-----------------------

    # 打開(kāi)谷歌然后訪問(wèn)指定的網(wǎng)站
    driver.get("https://music.163.com/")

    # 最大化,睡眠是怕網(wǎng)速慢沒(méi)加載出來(lái)
    driver.maximize_window()
    time.sleep(1)

    # 鼠標(biāo)從(0,0)向x(1435px),y(35px)移動(dòng),用左鍵點(diǎn)擊一下
    ActionChains(driver).move_by_offset(1435, 35).click().perform()
    time.sleep(0.3)

    # 點(diǎn)擊其他方式
    ActionChains(driver).move_by_offset(-480, 575).click().perform()
    time.sleep(0.3)

    # 同意條款
    ActionChains(driver).move_by_offset(-218, -10).click().perform()
    time.sleep(0.3)

    # 手機(jī)登錄
    ActionChains(driver).move_by_offset(107, -100).click().perform()
    time.sleep(0.3)

    # 輸入賬號(hào)密碼
    # 通過(guò)css選擇器獲取id為"p"的標(biāo)簽,然后send_keys就是模擬輸入一些信息
    driver.find_element_by_css_selector("#p").send_keys("賬號(hào)")
    driver.find_element_by_css_selector("#pw").send_keys("密碼")
    time.sleep(0.3)

    # 點(diǎn)擊登錄
    ActionChains(driver).move_by_offset(110, 15).click().perform()
    time.sleep(1)

    # 找到頭像懸浮
    img = driver.find_element_by_css_selector("div.head:nth-child(1) > img:nth-child(1)")
    ActionChains(driver).move_to_element(img).perform()
    time.sleep(0.5)
    # 點(diǎn)擊我的主頁(yè)
    ActionChains(driver).move_by_offset(0, 40).click().perform()
    time.sleep(0.5)
    # 點(diǎn)擊喜歡的音樂(lè)
    ActionChains(driver).move_by_offset(-870, 830).click().perform()
    time.sleep(0.3)

    # -----------------selenium自動(dòng)登錄-----------------------

登錄完畢后就可以獲取cookie,但看一下下面的cookie

[{'domain': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_TID', 'path': '/', 'secure': False, 'value': 'UnQj6SSNqN9BEVdubmNcEjpl%2B9DA'}, {'domain': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_NIKE', 'path': '/', 'secure': False, 'value': '9ca17ae2e6ffcda170e2e6ee87f4508ef58483ea4a97968ea7c54e879a8eaaf445aebc83b6e933f3f1c0b4c82af0fea7c3b92af697b7a6dc7b82afc09ad98ca695bc5082ecbcb1e772b7889b3d1c15bf28da0bbfb5b95aa8795f073adbc9c98ed79a28d8aa7f450f1ae9dd9b77a85edbf9ac625f1ef84d8f970b4e7bfd8cd21b48e8c8ec17df3e7a898f74488ef9bb5c837e2a3'}, {'domain': '.music.163.com', 'httpOnly': False, 'name': 'WNMCID', 'path': '/', 'sameSite': 'Strict', 'secure': False, 'value': 'fdygqk.1611989994304.01.0'}, {'domain': '.music.163.com', 'httpOnly': False, 'name': 'WEVNSM', 'path': '/', 'sameSite': 'Strict', 'secure': False, 'value': '1.0.0'}, {'domain': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_NI', 'path': '/', 'secure': False, 'value': '6IyEYqBqpyZMITjt9DB4tPdzuXUFC%2BNyOiu3S04CTC5Nsv2Q4gkMM0BQ2SPZxQWvItmyodTwnsbSFFqD3rS84rG3qyG%2F31L7zdp9q7N%2BpRDmBw19hwtHD1UTE%3D'}, {'domain': '.music.163.com', 'expiry': 1927349994, 'httpOnly': False, 'name': 'NMTID', 'path': '/', 'secure': False, 'value': '00O-pWx8ZDJJQfiFkHzsgin07nYSmUAAAF3UhdN2w'}, {'domain': '.163.com', 'expiry': 4765589994, 'httpOnly': False, 'name': '_ntes_nuid', 'path': '/', 'secure': False, 'value': '738fc9cd89d6d8799fa76b3348d25d7d'}, {'domain': '.163.com', 'expiry': 4765589994, 'httpOnly': False, 'name': '_ntes_nnid', 'path': '/', 'secure': False, 'value': '738fc9cd89d6d8799fa76b3348d25d7d,1611989994150'}, {'domain': '.music.163.com', 'expiry': 1769671794, 'httpOnly': False, 'name': '_iuqxldmzr_', 'path': '/', 'secure': False, 'value': '32'}, {'domain': '.music.163.com', 'expiry': 1769671794, 'httpOnly': False, 'name': 'JSESSIONID-WYYY', 'path': '/', 'secure': False, 'value': 'OoCMxNwGV%5CfZD2OSzAXovf4ASVZsJ8UQ4sgg7JfH075cKTD%2FW3sMzZj%2BpayS1EnNVXzRm%2F2GxfzIoNv3FTjYxKeNFZWqf6UeiMSc1%2BG98kgsEM94juuE%5Cs18k2%2BPNPAp3hU0G%5CFDUtjkimCR5pgOIOI%3A1611991794102'}]

是列表加字典的結(jié)構(gòu),而Scrapy的cookie是字符串類(lèi)型的,所以我們要做一個(gè)轉(zhuǎn)型

# 將driver獲取的字典類(lèi)型的cookie提取name和value封裝成字符串
    temp = []
    for i in driver.get_cookies():
      temp.append(i['name'] + "=" + i['value'])
    # 返回字符串cookie
    return ';'.join(temp)

所以這個(gè)函數(shù)基本就寫(xiě)完了,自動(dòng)登錄后獲取cookie是不是很爽!!!
現(xiàn)在重寫(xiě)一下def start_requests(self),這個(gè)函數(shù)是在請(qǐng)求發(fā)起前執(zhí)行的

在這個(gè)函數(shù)把請(qǐng)求頭給塞進(jìn)去,因?yàn)閟etting那邊沒(méi)有定義

def start_requests(self):
    # 定義請(qǐng)求頭的時(shí)候調(diào)用一下getCookie獲取一下cookie
    headers = {
      'Cookie': self.getCookie(),
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    }
    # 注意url是個(gè)列表這里拿下標(biāo)[0],然后把headers請(qǐng)求頭塞進(jìn)去,交給parse函數(shù)
    yield scrapy.Request(url=self.start_urls[0], headers=headers, callback=self.parse)

請(qǐng)求前一切準(zhǔn)備好之后,在解析函數(shù)(parse)進(jìn)行保存一下數(shù)據(jù),記得導(dǎo)re包

def parse(self, response):
    # 匹配歌曲名的正則表達(dá)式
    patt = re.compile(r'a href="/song.id=.*?">([^|{]*?)/a>')

    # 找到所有歌曲名
    listdata = re.findall(patt, response.text)
    
    # 把數(shù)據(jù)寫(xiě)進(jìn)txt文件
    with open(file="../response.txt", mode="w+", encoding="utf-8") as file:
      for item in listdata:
        file.write(item+"\n")

一句啟動(dòng)爬蟲(chóng)的命令,眨眨眼的時(shí)間 ~
數(shù)據(jù)就進(jìn)去了哦!原來(lái)我的喜愛(ài)歌單只有不到500~

下面就是爬蟲(chóng)源代碼

import scrapy
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import re

class WyyspiderSpider(scrapy.Spider):
  name = 'wyySpider'
  allowed_domains = ['163.com']
  start_urls = ['https://music.163.com/playlist?id=19xxxxx7']

  def getCookie(self):
    # 獲取谷歌的驅(qū)動(dòng),參數(shù)為剛剛驅(qū)動(dòng)程序的位置
    driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")
    # -----------------selenium自動(dòng)登錄-----------------------

    # 打開(kāi)谷歌然后訪問(wèn)指定的網(wǎng)站
    driver.get("https://music.163.com/")

    # 最大化,睡眠是怕網(wǎng)速慢沒(méi)加載出來(lái)
    driver.maximize_window()
    time.sleep(1)
		# 以下坐標(biāo)以自己的電腦為準(zhǔn)
    # 鼠標(biāo)從(0,0)向x(1435px),y(35px)移動(dòng),用左鍵點(diǎn)擊一下
    ActionChains(driver).move_by_offset(1435, 35).click().perform()
    time.sleep(0.3)

    # 點(diǎn)擊其他方式
    ActionChains(driver).move_by_offset(-480, 575).click().perform()
    time.sleep(0.3)

    # 同意條款
    ActionChains(driver).move_by_offset(-218, -10).click().perform()
    time.sleep(0.3)

    # 手機(jī)登錄
    ActionChains(driver).move_by_offset(107, -100).click().perform()
    time.sleep(0.3)

    # 輸入賬號(hào)密碼
    # 通過(guò)css選擇器獲取id為"p"的標(biāo)簽,然后send_keys就是模擬輸入一些信息
    driver.find_element_by_css_selector("#p").send_keys("賬號(hào)")
    driver.find_element_by_css_selector("#pw").send_keys("密碼")
    time.sleep(0.3)

    # 點(diǎn)擊登錄
    ActionChains(driver).move_by_offset(110, 15).click().perform()
    time.sleep(1)

    # 找到頭像懸浮
    img = driver.find_element_by_css_selector("div.head:nth-child(1) > img:nth-child(1)")
    ActionChains(driver).move_to_element(img).perform()
    time.sleep(0.5)
    # 點(diǎn)擊我的主頁(yè)
    ActionChains(driver).move_by_offset(0, 40).click().perform()
    time.sleep(0.5)
    # # 點(diǎn)擊喜歡的音樂(lè)
    # ActionChains(driver).move_by_offset(-870, 830).click().perform()
    # time.sleep(0.3)


    # -----------------selenium自動(dòng)登錄-----------------------

    # 將driver獲取的字典類(lèi)型的cookie提取name和value封裝成字符串
    # 臨時(shí)存放每個(gè)拼接好的key=value字符串
    temp = []

    # 遍歷driver給的cookies字典
    for i in driver.get_cookies():
      temp.append(i['name'] + "=" + i['value'])

    # 返回字符串cookie
    return ';'.join(temp)

  def start_requests(self):
    # 定義請(qǐng)求頭的時(shí)候調(diào)用一下getCookie獲取一下cookie
    headers = {
      'Cookie': self.getCookie(),
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    }
    # 注意url是個(gè)列表這里拿下標(biāo)[0],然后把headers請(qǐng)求頭塞進(jìn)去,交給parse函數(shù)
    yield scrapy.Request(url=self.start_urls[0], headers=headers, callback=self.parse)

  def parse(self, response):
    # 匹配歌曲名的正則表達(dá)式
    patt = re.compile(r'a href="/song.id=.*?">([^|{]*?)/a>')

    # 找到所有歌曲名
    listdata = re.findall(patt, response.text)

    # 把數(shù)據(jù)寫(xiě)進(jìn)txt文件
    with open(file="response.txt", mode="w+", encoding="utf-8") as file:
      for item in listdata:
        file.write(item+"\n")

到此這篇關(guān)于Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單的文章就介紹到這了,更多相關(guān)Scrapy+Selenium爬取網(wǎng)易云音樂(lè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Selenium獲取登錄Cookies并添加Cookies自動(dòng)登錄的方法
  • Selenium webdriver添加cookie實(shí)現(xiàn)過(guò)程詳解
  • selenium中g(shù)et_cookies()和add_cookie()的用法詳解
  • Python Selenium Cookie 繞過(guò)驗(yàn)證碼實(shí)現(xiàn)登錄示例代碼
  • 利用selenium 3.7和python3添加cookie模擬登陸的實(shí)現(xiàn)
  • Python中Selenium對(duì)Cookie的操作方法

標(biāo)簽:漢中 長(zhǎng)春 重慶 臨汾 廊坊 河池 德宏 東莞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單》,本文關(guān)鍵詞  Scrapy+Selenium,自動(dòng),獲取,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂(lè)個(gè)人喜愛(ài)歌單的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章