Scrapy+Selenium 은 쿠키 를 자동 으로 가 져 옵 니 다.

이 물건 은 매우 건조 하 니,발 길 을 따라 가라!!!
Cookie
쿠키 는 무엇 입 니까?
작은 과자?먹 어도 돼 요?
쉽게 말 하면 당신 이 처음으로 계 정 비밀번호 로 서버 를 방문 한 것 입 니 다.
서버 는 이 컴퓨터 하 드 디스크 에 신분 인식 회원 카드(cookie)를 설정 합 니 다.
다음 에 또 방문 할 때 카드 만 밝 혀 주세요.
서버 는 당신 이 왔 다 는 것 을 알 게 될 것 입 니 다.당신 의 계 정 비밀번호 등 정보 가 이미 회원 카드 에 새 겨 져 있 기 때 문 입 니 다.
수요 분석
파충류 가 개인 데 이 터 를 방문 하려 면 쿠키 로 위장 해 야 한다.
쿠키 를 얻 으 려 면 먼저 로그 인 해 야 합 니 다.파충 류 는 양식 을 통 해 계 정 비밀 번 호 를 제출 해 달라 고 요청 할 수 있 습 니 다.
하지만 불 여우 F12 에서 캡 처 한 데 이 터 는...
왕 이 클 라 우 드 음악 은 먼저 당신 의 계 정 비밀 번 호 를 코드 로 만 든 다음 에 post 요청 을 보 냅 니 다.
그래서 저희 가 폼 데 이 터 를 준비 하 다가 렉 걸 렸 어 요.
이 럴 때 우 리 는 자동화 테스트 셀 레 니 움 을 사용 하여 로그 인 을 도 울 수 있다.
로그 인 후 파충류 에 게 쿠키 를 가 져 다 사용
OK,잔말 도 다 했 으 니 그냥 해!!
일단 저 랑 파충류 프로젝트 랑 파충류 만 들 기.
cmd 에서 만 들 기
在这里插入图片描述
Pycharm 으로 이 프로젝트 를 엽 니 다.
우선 설정 파일 setting.py 를 수정 합 니 다.
1.로봇 프로 토 콜 닫 기
2.쿠키 사용 안 함 기능 취소
在这里插入图片描述
이제 파충류 파일 wy Spider.py 로 돌아 가 초기 작업 을 준비 하 겠 습 니 다.
start 수정urls 의 사이트 주소 와 요청 헤더 준비
먼저 불 여우 브 라 우 저 로 왕 이 클 라 우 드 음악 을 켜 고 로그 인 후 개인 홈 페이지 로 들어간다.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 在这里插入图片描述
파충류 코드 에 준비 해 주세요.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']
먼저 자동 로그 인 기능 을 실현 하여 쿠키 를 가 져 옵 니 다.
우선 자동화 테스트 패키지(Selenium)를 안내 해 드 리 겠 습 니 다.
이 가방 이 없 으 면 콘 솔 로 이동:pip--default-timeout=100 install selenium-ihttp://pypi.douban.com/simple/ --trusted-host pypi.douban.com

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
가방 을 안내 하고 구 글 의 드라이버 가 필요 합 니 다.먼저 자신의 구 글 버 전 을 보 세 요.
在这里插入图片描述
이 사이트 에서 같은 버 전의 드라이버 를 다운로드 하 십시오.https://sites.google.com/a/chromium.org/chromedriver/home
만약 버 전이 나의 것 과 같다 면 네트워크 에 가서 다운로드 할 수 있다.
링크:https://pan.baidu.com/s/1M-gME2R8EEhEoFlPaDhbmA 추출 코드:7iai
압축 을 풀 고 이 구동 위 치 를 기억 하 세 요.파충류 파일 에 쿠키 를 가 져 오 는 함 수 를 쓰 세 요.
아래 코드 의 좌 표 는 반드시 여러분 의 컴퓨터 에 적합 한 것 은 아니 지만,앤 리 에 게 물리 적 인 외 장(컴퓨터 위 챗 캡 처 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'}]
목록 에 사전 을 추가 하 는 구조 이 고 Scrapy 의 쿠키 는 문자열 형식 이기 때문에 우 리 는 전환 을 해 야 합 니 다.

#  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),이 함 수 는 요청 이 시작 되 기 전에 실 행 됩 니 다.
이 함수 에 서 는 setting 쪽 에 정의 가 없 기 때문에 요청 헤 더 를 넣 습 니 다.

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)
요청 전 모든 준비 가 끝 난 후,해석 함수(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+"
")
여기 서 Scrapy+Selenium 이 쿠키 를 자동 으로 가 져 와 왕 이 클 라 우 드 음악 개인 이 좋아 하 는 노래 리스트 를 찾 는 것 에 관 한 글 을 소개 합 니 다.더 많은 Scrapy+Selenium 이 왕 이 클 라 우 드 음악 을 가 져 오 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기