Web ページ認証の実装: Scrapy-Selenium を使用したログインの処理

イニウクラウドエージェント

導入

Web クローラーの世界では、ログインや登録確認などのユーザー認証を必要とする Web ページに直面することがよくあります。この記事では、このようなWebページをScrapy-Seleniumを使って処理し、自動ログインとクローリングを実現する方法を紹介します。

概要

Scrapy-Selenium は、Scrapy と Selenium という 2 つの強力なクローラー ツールを組み合わせたもので、Scrapy フレームワーク内でブラウザーの操作をシミュレートして、認証が必要な Web ページを処理できます。これは、ログインが必要な Web サイトをクロールする場合に特に便利です。

文章

実際のアプリケーションでは、データを取得するためにユーザーにログインを要求する Web サイトが数多くあります。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}'

次に、スパイダーを作成してログイン操作を実装します。ログインが必要な Web サイトをクロールするとします。サンプル コードは次のとおりです。

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 を介してユーザー名とパスワードを入力するようシミュレートし、ログイン ボタンをクリックします。ログインに成功した後は、データをクロールするために認証が必要なページに引き続きアクセスできます。

ケース

ログインが必要な Web サイトをクロールし、自動ログインとデータ クロールに 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 を使用すると、ログインおよび登録認証が必要な Web ページに簡単に対処できます。この記事では、Selenium と Scrapy の構成方法と、自動認証とデータ クロールを実現するための Spider の作成方法、およびクローラーの効率を向上させるプロキシ設定の追加方法を紹介します。このアプローチにより、クローラーの効率と機能が大幅に向上します。

Selenium と Scrapy を組み合わせることで、特にユーザー認証が関係する場合に、さまざまなクローリング タスクをより柔軟かつ効率的に処理できるようになります。これにより、データ収集作業の可能性と利便性がさらに高まります。

おすすめ

転載: blog.csdn.net/ip16yun/article/details/132344371
おすすめ