潭州课堂25班:Ph201805201 爬虫高级 第五课 sclapy 框架 日志和 settings 配置 模拟登录(课堂笔记)

 

 

当要对一个页面进行多次请求时,

设   dont_filter = True   忽略去重

在 scrapy 框架中模拟登录

创建项目

创建运行文件

设请求头

# -*- coding: utf-8 -*-
import scrapy
import requests

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    # allowed_domains = ['douban.com']
    # 登录页面
    start_urls = ['https://accounts.douban.com/login']
    log_url = 'https://accounts.douban.com/login'
    c_g_url = 'https://www.douban.com/'
    def parse(self, response):
        # 如果出现验证码
        # 验证码
        captcha_url = response.xpath('//img[@id="captcha_image"]/@src').extract_first()
        #  如果没有验证码
        if not captcha_url:
            print('没有验证码')
            data = {
                'source': 'index_nav',
                'redir':'https://www.douban.com/people/184159212/',
                'form_email': '13605938437',
                'form_password': '17906808lmlmlm',
                'login':'登录'
            }
        else:
            print('出现验证码')
            captcha_id = response.xpath('//input[@name="captcha-id"]/@value').extract_first()
            # 下载图片验证码
            with open('1.jpg','wb')as f:
                f.write(requests.get(captcha_url).content)
            captcha_solution = input('>>>>>')
            data = {
                'source': 'None',
                'redir':'https://www.douban.com/',
                'captcha-solution':captcha_solution,
                'captcha-id':captcha_id,
                'form_email': '账号',
                'form_password': '密码',
                'login':'登录'
            }

        # 返回url , 参数 , 回调函数
        yield scrapy.FormRequest(url=self.log_url,formdata=data,callback=self.login_after)

    def login_after(self,response):
        # 判断是否登录成功
        text ={
                'ck': '7nL_',
                'comment':' 哈哈....哈哈....哈哈....'
            }
        name = response.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]//text()').extract()
        if name:
            print('登录成功,当前用户是%s'%name)
            yield scrapy.FormRequest(url=self.c_g_url,formdata=text)
        else:print('登录失败')


  

原文地址:https://www.cnblogs.com/gdwz922/p/9764203.html