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 이 왕 이 클 라 우 드 음악 을 가 져 오 는 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AWS lambda+scrapy로 정기적으로 서버리스 스크래핑 1.8먼저 결론을 쓰면 Lambda에서 움직이는 곳까지 갈 수 없었습니다. 다른 방법의 대처는 있으므로, 그쪽이 잘 되면 추기, 혹은 다른 기사로서 들려고 생각합니다. 이번에는 작성한 weather_spider.py를 A...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.