웹페이지 인증 구현: Scrapy-Selenium을 사용하여 로그인 처리

Yiniu 클라우드 에이전트

소개

웹 크롤러의 세계에서는 로그인, 등록 확인 등 사용자 인증이 필요한 일부 웹 페이지를 자주 접해야 합니다. 이 기사에서는 Scrapy-Selenium을 사용하여 이러한 웹페이지를 처리하여 자동 로그인 및 크롤링을 구현하는 방법을 소개합니다.

개요

Scrapy-Selenium은 두 가지 강력한 크롤러 도구인 Scrapy와 Selenium을 결합하고 Scrapy 프레임워크 내에서 브라우저 작업을 시뮬레이션하여 인증이 필요한 웹 페이지를 처리할 수 있습니다. 이는 로그인이 필요한 웹사이트를 크롤링하는 데 특히 유용합니다.

텍스트

실제 응용 프로그램에는 데이터를 얻기 위해 사용자가 로그인해야 하는 웹사이트가 많이 있습니다. Scrapy-Selenium은 사용자 로그인 작업을 시뮬레이션하여 크롤러가 인증이 필요한 페이지에 액세스할 수 있도록 도와줍니다.

settings.py먼저 프로젝트의 Selenium 관련 정보와 미들웨어는 물론 프록시 설정도 구성 해야 합니다 .

SELENIUM_DRIVER_NAME = 'chrome'
SELENIUM_DRIVER_EXECUTABLE_PATH = '/path/to/chromedriver'
SELENIUM_DRIVER_ARGUMENTS = ['--headless']  # 可选,无头模式运行浏览器
DOWNLOADER_MIDDLEWARES = {
    
    
    'scrapy_selenium.SeleniumMiddleware': 800,
    'your_project_name.middlewares.ProxyMiddleware': 750
}
# 亿牛云 设置代理信息
PROXY_HOST = "www.16yun.cn"
PROXY_PORT = "3111"
PROXY_USER = "16YUN"
PROXY_PASS = "16IP"

middlewares.py프록시 미들웨어 작성 :

class ProxyMiddleware:
    def __init__(self, proxy_host, proxy_port, proxy_user, proxy_pass):
        self.proxy_host = proxy_host
        self.proxy_port = proxy_port
        self.proxy_user = proxy_user
        self.proxy_pass = proxy_pass

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            proxy_host=crawler.settings.get('PROXY_HOST'),
            proxy_port=crawler.settings.get('PROXY_PORT'),
            proxy_user=crawler.settings.get('PROXY_USER'),
            proxy_pass=crawler.settings.get('PROXY_PASS')
        )

    def process_request(self, request, spider):
        request.meta['proxy'] = f'http://{
      
      self.proxy_user}:{
      
      self.proxy_pass}@{
      
      self.proxy_host}:{
      
      self.proxy_port}'

다음으로 로그인 작업을 구현하기 위해 Spider를 만들 수 있습니다. 로그인이 필요한 웹사이트를 크롤링한다고 가정해 보겠습니다. 다음은 샘플 코드입니다.

import scrapy
from scrapy_selenium import SeleniumRequest

class LoginSpider(scrapy.Spider):
    name = 'login_spider'
    start_urls = ['https://example.com/login']

    def parse(self, response):
        yield SeleniumRequest(
            url=response.url,
            callback=self.login,
            wait_time=5  # 等待时间,确保页面加载完毕
        )

    def login(self, response):
        self.driver.find_element_by_id('username').send_keys('your_username')
        self.driver.find_element_by_id('password').send_keys('your_password')
        self.driver.find_element_by_id('login_button').click()
        
        yield SeleniumRequest(
            url='https://example.com/data_page',
            callback=self.parse_data
        )
    
    def parse_data(self, response):
        # 解析数据...

위 코드에서는 먼저 로그인 페이지를 방문한 다음 사용자가 Selenium을 통해 사용자 이름과 비밀번호를 입력하도록 시뮬레이션하고 로그인 버튼을 클릭합니다. 로그인에 성공하면 데이터를 크롤링하기 위해 인증이 필요한 페이지를 계속 방문할 수 있습니다.

경우

로그인이 필요한 웹사이트를 크롤링하고 자동 로그인 및 데이터 크롤링을 위해 Scrapy-Selenium을 사용한 다음 데이터를 MongoDB 데이터베이스에 저장한다고 가정해 보겠습니다.

import scrapy
from scrapy_selenium import SeleniumRequest
import pymongo

class LoginAndScrapeSpider(scrapy.Spider):
    name = 'login_scrape'
    start_urls = ['https://example.com/login']

    def parse(self, response):
        yield SeleniumRequest(
            url=response.url,
            callback=self.login,
            wait_time=5
        )

    def login(self, response):
        self.driver.find_element_by_id('username').send_keys('your_username')
        self.driver.find_element_by_id('password').send_keys('your_password')
        self.driver.find_element_by_id('login_button').click()

        yield SeleniumRequest(
            url='https://example.com/data_page',
            callback=self.parse_data
        )

    def parse_data(self, response):
        data = response.xpath('//div[@class="data"]/text()').get()

        # 存储数据到MongoDB
        client = pymongo.MongoClient(host='localhost', port=27017)
        db = client['scraped_data']
        collection = db['data_collection']
        collection.insert_one({
    
    'data': data})

        client.close()

발문

Scrapy-Selenium을 통해 로그인 및 회원가입 인증이 필요한 웹페이지를 쉽게 처리할 수 있습니다. 이 기사에서는 Selenium 및 Scrapy를 구성하는 방법, Spider를 작성하여 자동 인증 및 데이터 크롤링을 구현하고 프록시 설정을 추가하여 크롤러 효율성을 향상시키는 방법을 소개합니다. 이 접근 방식은 크롤러의 효율성과 기능을 크게 향상시킬 수 있습니다.

Selenium과 Scrapy를 결합함으로써 특히 사용자 인증이 관련된 경우 다양한 크롤링 작업을 보다 유연하고 효율적으로 처리할 수 있습니다. 이는 데이터 수집 작업에 더 많은 가능성과 편의성을 제공합니다.

추천

출처blog.csdn.net/ip16yun/article/details/132344371