Latihan 2 : Login quotes.toscrape.com

Pada modul ini kita akan belajar mengakses login form pada quotes.toscrape.com.

Pertama, mari kita buat newproject menggunakan perintah (nama project sesuaikan dengan kebutuhan Anda).

scrapy startproject login_toscrape

Kemudian, kita buat spider baru dengan perintah

scrapy genspider login quotes.toscrape.com

Karena web quotes.toscrape.com tidak memiliki robots.txt, kita bisa matikan setting ROBOTSTXT_OBEY. Buka file setting.py, kemudian ubah setting dari True menjadi False.

ROBOTSTXT_OBEY = False

Buka file login.py, kemudian masukan code berikut

import scrapy
from scrapy.http import FormRequest

class LoginSpider(scrapy.Spider):
    name = 'login'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/login']

    def parse(self, response):
        csrf_token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()

        yield FormRequest('http://quotes.toscrape.com/login', 
                            formdata={'csrf_token': csrf_token, 
                                      'username': 'anything',
                                      'password': 'anything'},
                                      callback=self.parse_afterlogin)

    def parse_afterlogin(self, response):
        if response.xpath('//a[text]="Logout"'):
            self.log('Login berhasil..')

Yang baru disini adalah bagian formdata. Formdata adalah parameter yang digunakan untuk post data yang diperlukan, dalam hal ini adalah csrf_token, username dan password.

Untuk mengetahui formdata yang harus dikirimkan, inspect halaman http://quotes.toscrape.com/login.

Fungsi parse_afterlogin adalah callback setelah proses login dilakukan. Digunakan untuk memeriksa apakah proses login berhasil. Fungsi diatas akan memeriksa apakah response terdapat link dengan text Logout.

Anda juga bisa menggunakan library open_in_browser untuk membuka browser untuk melihat secara visual apakah login berhasil.

Berikut modifikasi code diatas:

import scrapy
from scrapy.http import FormRequest
from scrapy.utils.response import open_in_browser

class LoginSpider(scrapy.Spider):
    name = 'login'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/login']

    def parse(self, response):
        csrf_token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()

        yield FormRequest('http://quotes.toscrape.com/login', 
                            formdata={'csrf_token': csrf_token, 
                                      'username': 'anything',
                                      'password': 'anything'},
                                      callback=self.parse_afterlogin)

    def parse_afterlogin(self, response):
        open_in_browser(response)
Sharing is caring:

Leave a Comment