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

简介: settings.py 文件中添加请求头,robots改为False。代码中注释较为详细,看不懂的私聊哦import scrapyfrom urllib import requestfrom PIL import Imageclass DoubanLoginSpiderSpider(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


目录
相关文章
|
11月前
|
数据采集 存储 NoSQL
实现网页认证:使用Scrapy-Selenium处理登录
在网络爬虫的世界中,我们经常需要面对一些需要用户认证的网页,如登录、注册验证等。本文将介绍如何使用Scrapy-Selenium来处理这类网页,实现自动化登录和爬取。
219 0
实现网页认证:使用Scrapy-Selenium处理登录
|
数据采集 Web App开发 数据安全/隐私保护
为什么你用Scrapy 无法使用 Cookies登录
为什么你用Scrapy 无法使用 Cookies登录
73 0
|
数据采集 开发者 Python
14、web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
打码接口文件 # -*- coding: cp936 -*- import sys import os from ctypes import * # 下载接口放目录 http://www.
1212 0
|
数据采集 Web App开发 JavaScript
12、web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代star...
1736 0
|
Python 数据采集
|
Web App开发 数据采集 iOS开发
Python爬虫从入门到放弃(二十四)之 Scrapy登录知乎
因为现在很多网站为了限制爬虫,设置了为只有登录才能看更多的内容,不登录只能看到部分内容,这也是一种反爬虫的手段,所以这个文章通过模拟登录知乎来作为例子,演示如何通过scrapy登录知乎 在通过scrapy登录知乎之前,我们先通过requests模块登录知乎,来熟悉这个登录过程 不过在这之前需要了...
1818 0
|
2月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
30 1
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫:利用代理服务器爬取热门网站数据
Scrapy爬虫:利用代理服务器爬取热门网站数据
|
21天前
|
数据采集 存储 中间件
Scrapy,作为一款强大的Python网络爬虫框架,凭借其高效、灵活、易扩展的特性,深受开发者的喜爱
【6月更文挑战第10天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程及中间件机制提升爬取效率。它提供丰富组件和API,支持灵活的数据抓取、清洗、存储,可扩展到各种数据库。通过自定义组件,Scrapy能适应动态网页和应对反爬策略,同时与数据分析库集成进行复杂分析。但需注意遵守法律法规和道德规范,以合法合规的方式进行爬虫开发。随着技术发展,Scrapy在数据收集领域将持续发挥关键作用。
65 4
|
2月前
|
数据采集 存储 中间件
Python高效爬虫——scrapy介绍与使用
Scrapy是一个快速且高效的网页抓取框架,用于抓取网站并从中提取结构化数据。它可用于多种用途,从数据挖掘到监控和自动化测试。 相比于自己通过requests等模块开发爬虫,scrapy能极大的提高开发效率,包括且不限于以下原因: 1. 它是一个异步框架,并且能通过配置调节并发量,还可以针对域名或ip进行精准控制 2. 内置了xpath等提取器,方便提取结构化数据 3. 有爬虫中间件和下载中间件,可以轻松地添加、修改或删除请求和响应的处理逻辑,从而增强了框架的可扩展性 4. 通过管道方式存储数据,更加方便快捷的开发各种数据储存方式