Scarapy+Seleniumは自動的にクッキーを獲得して網易の雲の音楽の個人を取って歌の単に好きです。


この商品はよく乾きました。
Cookie
クッキーは何ですか?
クッキー食べられますか
簡単に言えば、初めてアカウントのパスワードでサーバーにアクセスしました。
サーバーはあなたのマシンのハードディスクに身分識別カードを設置します。
今度訪問する時はカードを見せてください。
サーバーはあなたが来たことを知っています。あなたのアカウントのパスワードなどの情報が会員カードに刻まれています。
需要分析
爬虫類は個人のデータにアクセスするにはクッキーで偽装する必要があります。
クッキーを入手するには先に登録しなければなりません。爬虫類はフォームを通じてアカウントのパスワードを提出してください。
しかし、キツネのF 12で切り取られたデータは、
網易雲音楽はまずあなたのアカウントのパスワードをコードしてからpostをお願いします。
だから私たちはフォームデータを準備する時にすでに引っかかってしまいました。
この時に自動化テストSeleniumを使って登録してください。
登録したらクッキーを取って爬虫類に使います。
大丈夫です。無駄話も終わりました。直接に開けてください。
まず私と一緒に爬虫類プロジェクトと爬虫類を作ります。
cmdで作成
在这里插入图片描述
Pycharmでこのプロジェクトを開けます。
まず設定ファイルのsetting.pyを変更します。
1.ロボットプロトコルを閉じる
2.クッキーを無効にする機能をキャンセルする
在这里插入图片描述
今は爬虫類書類に戻ります。wySpider.pyは前の仕事を準備します。
start_を修正しますurlsの中のURLと1つの要求の頭を用意します。
まず火狐ブラウザで網易雲音楽を開けて、登録してから個人のホームページに入ります。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
爬虫類コードを準備して、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']
まず自動登録機能を実現してクッキーを取得します。
まず自動化テストのカバンを案内します。
このカバンがないならコンソールに行きます。pip--default-timeout=100 install selenium-ihttp://pypi.douban.com/simple/ --trusted-host pypei.douban.com

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
Googleのドライバが必要です。まず自分のGoogleバージョンを見てください。
在这里插入图片描述
このサイトに同じバージョンのドライバをダウンロードします。https://sites.google.com/a/chromium.org/chromedriver/home
もしバージョンが私のと同じなら、ネットディスクでダウンロードできます。
リンク:https://pan.baidu.com/s/1M-gME2R8EEhEoFlPaDhbmA 抽出コード:7 iai
ストレス解消後はこの駆動の位置を覚えて、爬虫類ファイルにクッキーを得る関数を書きます。
以下のコードの座標は必ずしも皆様のコンピュータに適していませんが、アムウェイの物理的な外注(パソコンのマイクロメッセージのスクリーンショットAlt+A)を差し上げます。

 def getCookie(self):
    #        ,            
    driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")
    # -----------------selenium    -----------------------

    #              
    driver.get("https://music.163.com/")

    #    ,            
    driver.maximize_window()
    time.sleep(1)

    #    (0,0) x(1435px),y(35px)  ,       
    ActionChains(driver).move_by_offset(1435, 35).click().perform()
    time.sleep(0.3)

    #       
    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)

    #     
    ActionChains(driver).move_by_offset(107, -100).click().perform()
    time.sleep(0.3)

    #       
    #   css     id "p"   ,  send_keys          
    driver.find_element_by_css_selector("#p").send_keys("  ")
    driver.find_element_by_css_selector("#pw").send_keys("  ")
    time.sleep(0.3)

    #     
    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)
    #       
    ActionChains(driver).move_by_offset(0, 40).click().perform()
    time.sleep(0.5)
    #        
    ActionChains(driver).move_by_offset(-870, 830).click().perform()
    time.sleep(0.3)

    # -----------------selenium    -----------------------
登録が完了したらクッキーを取得できますが、下のクッキーを見てください。

[{'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'}]
リストに辞書を入れる構造です。Scapyのクッキーは文字列タイプです。だから私達はモデルチェンジをします。

#  driver        cookie  name value      
    temp = []
    for i in driver.get_cookies():
      temp.append(i['name'] + "=" + i['value'])
    #      cookie
    return ';'.join(temp)
この関数は基本的に書き終わりました。自動登録してクッキーを手に入れるのは気持ちがいいですか?
今からdef startを書きなおします。requests(self)は、この関数が要求の開始前に実行されます。
この関数で要求先を押し込んでください。セッティングの定義がないからです。

def start_requests(self):
    #             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         [0],   headers      ,  parse  
    yield scrapy.Request(url=self.start_urls[0], headers=headers, callback=self.parse)
要求する前にすべての準備ができたら、解析関数でデータを保存してください。ガイドバッグを覚えてください。

def parse(self, response):
    #            
    patt = re.compile(r'<a href="/song.id=.*?">([^<|{]*?)</a>')

    #        
    listdata = re.findall(patt, response.text)
    
    #      txt  
    with open(file="../response.txt", mode="w+", encoding="utf-8") as file:
      for item in listdata:
        file.write(item+"
")
爬虫類の命令をかけて、まばたきをする時間。
データは入っていますよ。もともと私の好きな歌は500未満しかないです。
在这里插入图片描述
以下は爬虫源コードです。

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):
    #        ,            
    driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")
    # -----------------selenium    -----------------------

    #              
    driver.get("https://music.163.com/")

    #    ,            
    driver.maximize_window()
    time.sleep(1)
		#             
    #    (0,0) x(1435px),y(35px)  ,       
    ActionChains(driver).move_by_offset(1435, 35).click().perform()
    time.sleep(0.3)

    #       
    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)

    #     
    ActionChains(driver).move_by_offset(107, -100).click().perform()
    time.sleep(0.3)

    #       
    #   css     id "p"   ,  send_keys          
    driver.find_element_by_css_selector("#p").send_keys("  ")
    driver.find_element_by_css_selector("#pw").send_keys("  ")
    time.sleep(0.3)

    #     
    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)
    #       
    ActionChains(driver).move_by_offset(0, 40).click().perform()
    time.sleep(0.5)
    # #        
    # ActionChains(driver).move_by_offset(-870, 830).click().perform()
    # time.sleep(0.3)


    # -----------------selenium    -----------------------

    #  driver        cookie  name value      
    #           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):
    #             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         [0],   headers      ,  parse  
    yield scrapy.Request(url=self.start_urls[0], headers=headers, callback=self.parse)

  def parse(self, response):
    #            
    patt = re.compile(r'<a href="/song.id=.*?">([^<|{]*?)</a>')

    #        
    listdata = re.findall(patt, response.text)

    #      txt  
    with open(file="response.txt", mode="w+", encoding="utf-8") as file:
      for item in listdata:
        file.write(item+"
")
ここで、Scrrapy+Seleniumについて自動的にクッキーを取得し、網易雲音楽の個人的な好みの歌の記事を紹介しました。もっと関連のあるScrrapy+Seleniumは網易雲音楽の内容を検索してください。以前の文章を見たり、次の関連記事を見たりしてください。皆さん、これからもよろしくお願いします。