scrapy登录豆瓣并修改个人信息

settings.py 文件中添加请求头,robots改为False。
代码中注释较为详细,看不懂的私聊哦

import scrapy
from urllib import request
from PIL import Image


class DoubanLoginSpiderSpider(scrapy.Spider):
    name = 'douban_login_spider'
    allowed_domains = ['douban.com']
    start_urls = ['https://accounts.douban.com/login'] # 这个地方从登录的url开始写
    login_url = 'https://accounts.douban.com/login'

    def parse(self, response):
        data = {
            'source': 'None',
            'redir': 'https://www.douban.com/',
            'form_email': '',# 这里输入你的账号
            'form_password': '@', # 这里输入你的密码
            'remember': 'on',
            'login': '登录',
        }
        captcha_image = response.xpath('//img[@id="captcha_image"]/@src').get()
        print('='*50)
        # 豆瓣在输入错误几次才会出现验证码,这里加一个判断,如果没有出现验证码直接提交表单登录
        if captcha_image:
            captcha = self.regonize_captgha(captcha_image)
            data['captcha-solution: '] = captcha # 把验证码放入data中
            captcha_id = response.xpath('//input[@name=captcha-id]/@value').get()
            data['captcha_id'] = captcha_id # 把这个id也放进去
        # 执行登录操作,提交表单,执行回调解析登录后的页面。
        yield scrapy.FormRequest(url=self.login_url,formdata=data,callback=self.parse_page)

    def parse_page(self,response):
        if response.url == 'https://www.douban.com/':
            print('登录成功')
        else:
            print('登录失败')
        # 这里是修改个人信息的页面,我们跳转过去修改一下信息
        url = 'https://www.douban.com/people/184751170/'
        yield scrapy.Request(url=url,callback=self.xiugai)

    # 修改个人信息
    def xiugai(self,response):
        # 这里也是一个post请求,查找提交的参数,url。完成登录。
        ck = response.xpath('//input[@name="ck"]/@value').get()
        data = {'ck':ck,
            'signature': '云游十方'}
        edit_url = 'https://www.douban.com/j/people/184751170/edit_signature'
        # 这里提交表单以修改个人信息,同时指定callcake,如果不指定scrapy会默认调用parse方法。
        yield scrapy.FormRequest(url=edit_url,formdata=data,callback=self.parse_none)

    def parse_none(self,response):
        pass


    # 识别验证码,人工识别 也可以以人工打码的方式识别,在这里做扩展
    def regonize_captgha(self,captcha_img):
        request.urlretrieve(captcha_img,'captcha.png') # 把验证码保存到本地
        image = Image.open('captcha.png') # y用image库的open方法打开图片
        image.show() # 用show方法展现在窗口中
        captcha = input('请输入验证码:') # 手动输入验证码以完成登录
        return captcha
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要模拟登录豆瓣,需要使用 Scrapy 模拟登录的插件 `scrapy-login`。这个插件可以帮助你实现模拟登录,自动填写表单,发送 POST 请求等功能。 以下是模拟登录豆瓣的步骤: 1. 安装 scrapy-login ``` pip install scrapy-login ``` 2. 创建一个新的 Scrapy 项目 ``` scrapy startproject douban ``` 3. 在 `settings.py` 中添加以下代码: ``` DOWNLOADER_MIDDLEWARES = { 'scrapy_login.middleware.ScrapyLoginMiddleware': 200, } LOGIN_URL = 'https://accounts.douban.com/passport/login' LOGIN_USERNAME = 'your_username' LOGIN_PASSWORD = 'your_password' # 将 'douban' 替换为你的项目名称 LOGIN_REQUESTS_CONFIG = { 'endpoint': 'https://accounts.douban.com/j/mobile/login/basic', 'data': { 'name': LOGIN_USERNAME, 'password': LOGIN_PASSWORD, }, 'method': 'POST', 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer': 'https://accounts.douban.com/passport/login', }, 'meta': { 'dont_redirect': True, 'handle_httpstatus_list': [302], }, } ``` 这里的 `LOGIN_URL` 是豆瓣登录页面地址,`LOGIN_USERNAME` 和 `LOGIN_PASSWORD` 是你的豆瓣账号和密码。 4. 创建一个新的 Spider,并添加以下代码: ```python from scrapy.spiders import Spider from scrapy_login import login_user class DoubanSpider(Spider): name = 'douban' start_urls = ['https://www.douban.com/'] def start_requests(self): for url in self.start_urls: yield login_user(url=url, callback=self.parse) def parse(self, response): # 在这里处理登录后的网页 pass ``` 5. 运行爬虫 ``` scrapy crawl douban ``` 这样就可以模拟登录豆瓣了。需要注意的是,豆瓣有反爬虫机制,如果爬取速度过快或者频繁登录可能会导致账号被封禁。因此,建议在开发时使用测试账号进行测试,不要过度使用豆瓣的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值