scrapy框架编写模拟用户登录的三种方式:

方式一:携带cookie登录,携带cookie一般请求的url为登录后的页面,获取cookie信息应在登录后的页面获取,cookie参数应转成字典形式

# -*- coding: utf- -*-
import re
import scrapy class RenrenSpider(scrapy.Spider):
name = 'renren'
allowed_domains = ['renren.com']
start_urls = ['http://www.renren.com/966403607/profile']
#要对star_urls进行请求,则要重写start_requests
def start_requests(self): cookies = 'anonymid=joz9buh7-q7cfyi; depovince=GUZ; _r01_=1; _de=A10BB6D966D15FBA1F90E79AB0D2FDF8; ln_uact=18520877258; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; jebe_key=b605eb90-21b9-4072-9d48-b75b233c1cea%7Cb156ee0bfd56183e1b8eb9e5994eb5ef%7C1543293909743%7C1%7C1543293910671; jebecookies=9700aefc-77a1-49a7-8d74-882aa173e271|||||; JSESSIONID=abcxtZqTI1hOu4WzN0tDw; ick_login=21361cc0-986f-49bc-95f9-de3a9ed54a69; p=29e3cce85947859ee0e1d6264160539f7; first_login_flag=1; t=b6e6ac604c66019acf93cb471550349e7; societyguester=b6e6ac604c66019acf93cb471550349e7; id=966403607; xnsid=ac2d6a1a; loginfrom=syshome; wp_fold=0'
# 将cookies分割成字典形式
cookies = {
i.split("=")[]:i.split("=")[] for i in cookies.split("; ")
}
# 回调中携带cookies的值
yield scrapy.Request(
self.start_urls[],
cookies=cookies,
callback=self.parse, )
def parse(self, response):
item = {}
name = re.findall("尚学堂",response.body.decode())
item["name"] = name
yield item
为了可以知道cookie确实是在不同的解析函数中传递在setting中设置一个参数如下
# 该设置可以知道cookie确实是在不同的解析函数中传递
COOKIES_DEBUG=True

方式二:表单dataform的post请求,

# -*- coding: utf- -*-
import re
import scrapy class GithubSpider(scrapy.Spider):
name = 'github'
allowed_domains = ['github.com']
start_urls = ['https://github.com/login'] def parse(self, response):
authenticity_token = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()
# form表单提交post
formdata = {
"commit": "Sign in",
"utf8": "✓",
"authenticity_token": authenticity_token,
"login": "sxtpython",
"password": "sxt123456"
}
yield scrapy.FormRequest(
# 回调提交表单跳转后的url地址
'https://github.com/session',
formdata=formdata,
callback=self.parse_item,
) def parse_item(self,response):
item = {}
item["name"] = re.findall('sxtpython',response.body.decode())
yield item

方式三:自动从f响应中找到form表单进行登录

# -*- coding: utf- -*-
import re
import scrapy # 方式三
class Github2Spider(scrapy.Spider):
name = 'github2'
allowed_domains = ['github.com']
start_urls = ['https://github.com/login'] def parse(self, response): yield scrapy.FormRequest.from_response(
response,#自动从该响应中获取form表单
formdata={
'login':'sxtpython',
'password':'sxt123456'
},
callback=self.parse_item,
)
def parse_item(self,response):
item = {}
item["name"] = re.findall('sxtpython',response.body.decode())
yield item

scrapy模拟用户登录的更多相关文章

  1. python用scrapy模拟用户登录

    scrapy模拟登录 关注公众号"轻松学编程"了解更多. 注意:模拟登陆时,必须保证settings.py里的COOKIES_ENABLED(Cookies中间件) 处于开启状态 ...

  2. 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

    第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...

  3. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

  4. java.net.URL 模拟用户登录网页并维持session

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

  5. python 初学习 模拟用户登录

    #!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...

  6. python3.0 模拟用户登录,三次错误锁定

    # -*- coding:utf-8 -*- #需求模拟用户登录,超过三次错误锁定不允许登陆     count = 0   #realname passwd Real_Username = &quo ...

  7. xpath技术解析xml以及案例模拟用户登录效果

    问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...

  8. jdbc封装模拟用户登录

    dao层 接口 package com.qu.dao; public interface ILoginDAO { /** * 模拟用户登录 * 验证用户名 密码是否正确 * select * from ...

  9. java.net.URL 模拟用户登录网页并维持session【转】

    java.net.URL 模拟用户登录网页并维持session 半成品,并非完全有用 import java.io.BufferedReader; import java.io.InputStream ...

随机推荐

  1. pycharm 出现 "PEP:8 expected 2 blank lines ,found 0"

    https://blog.csdn.net/modangtian/article/details/79687623 这句话的意思是“有两个空白行,但是没有发现.” 在声明函数的那一行的上方必须有两行的 ...

  2. JQERY EasyUI Tabs 选项卡 自适应浏览器宽度高度 解决方案

    <script type="text/javascript"> $(window).resize(function () { $('#tt').tabs({ width ...

  3. 计算机基础:计算机网络-socket编程

    来源:mooc大学华南理工大学计算机网络课程 chapter6 代码:https://github.com/NeilKeats/SocketDemo/commit/5f3a795250a9533910 ...

  4. Doing Homework HDU - 1074 (状压dp)

    Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...

  5. springcloud实战案例苏宁和海信

    http://springcloud.cn/view/341 为什么springlcoud不选用zookeeper: http://www.infoq.com/cn/articles/why-does ...

  6. 5.django学习模型

    ##Django Models ##编写models 1.在应用根目录下创建models.py并引入models模块,创建类,继承models.Model该类即是一张数据表 2.字段创建 ##映射数据 ...

  7. BZOJ2815 拓扑排序 + LCA

    https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...

  8. go goroutine

    进程和线程 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的 一个独立单位. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更 小的能独立运行的基本单位. 一个进程可 ...

  9. eclipse没有server选项

    摘录自:https://www.cnblogs.com/xiaoxiaoweng/p/7298183.html 问题描述:eclipse没有server选项 解决问题:找到Help->Insta ...

  10. 解决pycharm问题:module 'pip' has no attribute 'main'

    问题 更新pip之后,Pycharm安装package出现如下报错: 解决 找到安装目录下 helpers/packaging_tool.py文件,找到如下代码: 修改为如下,保存即可.