Scrapy 进行简单的自动登录

前面豆子学习了用Scrapy进行基本的get请求,现在来看看如何进行简单的post操作。以一个论坛为例,现在看看如何进行一个简单的登录请求。

豆子在澳洲经常上的一个论坛是新足迹论坛,网站是www.oursteps.com.au

简单的自动登录和跳转

1. 创建新的项目和爬虫文件

Scrapy 进行简单的自动登录

Scrapy 进行简单的自动登录

一个基本的模板就生成了
Scrapy 进行简单的自动登录

2. 抓包获取登录的URL和请求字段

打开firefox,代理指向fiddler,然后点开fiddler,开始登录。fidder作为代理服务器,会把所有的请求内容都抓出来。

注意观察fidder的界面,向右的箭头代表是一个post请求
Scrapy 进行简单的自动登录

查看具体的textview可以看见他提交的内容
Scrapy 进行简单的自动登录

登录以后的论坛界面是这样
Scrapy 进行简单的自动登录

3. 编辑我们的爬虫文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request,FormRequest

class LoginSpider(scrapy.Spider):
    name = 'login'
    allowed_domains = ['oursteps.com.au']
        #这个默认的起点网址可以不用,因为我们下面配置了start-requests的方法,他们的功能类似,都是去爬第一个起始的网址
    #start_urls = ['http://oursteps.com.au/']
        #这个header可以是任何浏览器的头文件,用于伪装
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"
    }

    #里面的查询地址最好是使用在fidder里面看见的地址,cookiejar设为真,parse是用一个回调函数,执行爬取信息之后对应的操作
    def start_requests(self):
        return [Request("http://www.oursteps.com.au/", meta={"cookiejar": 1}, callback=self.parse)]

    #发送一个post请求,数据是字典格式的,发送完了之后执行另外一个回调函数
    def parse(self, response):
        data = {
            "username": "beanxyz",
            "password": "Snake2013",
        }

        print("login…")
        # 通过FormRequest.from_response()进行登陆
        return [FormRequest.from_response(response,
                                          # 设置cookie信息
                                          meta={"cookiejar": response.meta["cookiejar"]},
                                          # 设置headers信息模拟成浏览器
                                          headers=self.header,
                                          # 设置post表单中的数据
                                          formdata=data,
                                          # 设置回调函数,此时回调函数为next()
                                          callback=self.next,
                                          )]

#回调函数,直接把返回的页面保存下来
    def next(self,response):
        data=response.body
        #注意是二进制格式
        fh=open("C:/temp/ourstep/a.html","wb")
        fh.write(data)
        fh.close()
#登录成功了之后,再跳转到另外一个页面去,记住带着cookie的状态
        yield Request("http://www.oursteps.com.au/bbs/home.php?mod=space&uid=19783",callback=self.next2,meta={"cookiejar": True})

#保存新页面的内容
    def next2(self,response):
        data=response.body
        fh = open("C:/temp/ourstep/b.html", "wb")
        fh.write(data)
        fh.close()

4.执行爬虫

Scrapy 进行简单的自动登录

5.确认结果

登录成功后的界面
Scrapy 进行简单的自动登录

跳转到个人档案的界面
Scrapy 进行简单的自动登录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值