Scrapy爬虫模拟登陆豆瓣

作者: 岁月淡如水 | 来源:发表于2018-08-10 11:12 被阅读3次

    首先还是创建爬虫,其命令如下:

    #01.创建 Scrapy 项目
    scrapy startproject simulate_login
    #02. 进入 simulate_login目录下,创建爬虫
    scrapy genspider your_spider douban.com
    

    模拟登陆豆瓣的关键点
    1、分析真实post地址,寻找formdata;
    2、模拟post,构造类似的formdata;
    3、处理验证码。
    豆瓣登陆地址为https://accounts.douban.com/login,进入登陆界面,我们首先输入账号和密码,密码故意输错,然后输入正确的验证码。按F12分析真实的post地址---,寻找他的formdata,如下图:

    捕获.PNG

    实战操作:
    几个注意事项:
    1、注意Python2和Python3的部分语法区别;
    2、注意根据自己的实际情况,填写headers部分。

    到2018年8月10日为止,该方法还可以登陆豆瓣。下面贴出主要代码:

    # -*- coding: utf-8 -*-
    import scrapy
    import urllib,re
    from scrapy.http import Request,FormRequest
    
    class YourSpiderSpider(scrapy.Spider):
        name = 'your_spider'
        allowed_domains = ['douban.com']
        #start_urls = ['http://douban.com/']
        headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"} #供登录模拟使用
        
        def start_requests(self):
            url='https://www.douban.com/accounts/login'
            #return [Request(url=url,meta={"cookiejar":1},callback=self.parse)]#可以传递一个标示符来使用多个。如meta={'cookiejar': 1}这句,后面那个1就是标示符
            return [scrapy.FormRequest("https://accounts.douban.com/login", headers=self.headers, meta={"cookiejar":1}, callback=self.parse)]
        
        
        def get_content(self, response):
                title = response.xpath('//title/text()').extract()[0]
                if u'登录豆瓣' in title:
                    print("登录失败,请重试")
                else:
                    print("登陆成功")
    
        def parse(self, response):
            
            captcha = response.xpath('//*[@id="captcha_image"]/@src').extract()
            print(captcha)
            if len(captcha)>0:
                #有验证码,人工输入验证码
                urllib.request.urlretrieve(captcha[0],filename=r"C:\Users\LBX\your_project\simulate_login\simulate_login\captcha.png")
                captcha_value=input('查看captcha.png,有验证码请输入:')
                data={
                        "form_email":"18353113181@163.com",
                        "form_password":"9241113minda",
                        "captcha-solution":captcha_value,
                        }
            else:
                #此时没有验证码
                print("无验证码")
                data={
                        "form_email":"18353113181@163.com",
                        "form_password":"9241113minda",
                                            }
            print("正在登陆中.....")
            #进行登录
            return[
                    FormRequest.from_response(
                            response,
                            meta={"cookiejar":response.meta["cookiejar"]},
                            headers=self.headers,
                            formdata=data,
                            callback=self.get_content,
                            )
                    ]
                   
    

    相关文章

      网友评论

        本文标题:Scrapy爬虫模拟登陆豆瓣

        本文链接:https://www.haomeiwen.com/subject/vhrkbftx.html