功能点:如何发送携带cookie访问登录后的页面,如何发送post请求登录

爬取网站:bilibili、github

完整代码:https://files.cnblogs.com/files/bookwed/login.zip

主要代码:

bili.py

# -*- coding: utf-8 -*-
import scrapy
import re class BiliSpider(scrapy.Spider):
"""直接携带cookie访问登录后的bilibili页面"""
name = 'bili'
allowed_domains = ['bilibili.com']
# 登录后的个人主页
start_urls = ['https://account.bilibili.com/home/userInfo'] def start_requests(self):
cookies = "_uuid=738F48A9-E13A-9445-3577-3068FADC9F6A05981infoc; buvid3=5DE9F436-F051-44E1-9B97-AB53E60C3ED448999infoc;"
cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}
# 把cookies字符串放到headers里面传参,这种方式不行,要单独传cookies参数
# headers={"Cookie": cookies}
print(cookies)
yield scrapy.Request(
self.start_urls[0],
callback=self.parse,
cookies=cookies,
# headers=headers
) def parse(self, response):
# 验证是否成功
print("*"*30)
print(re.findall("bookwed", response.body.decode()))
print("*"*30) # yield scrapy.FormRequest(
# "http://",
# headers=self,
# formdata=dict(),
# callback=self.after_login
# )

github.py

# -*- coding: utf-8 -*-
import scrapy
import re class GithubSpider(scrapy.Spider):
"""利用scrapy发送post请求,模拟登录github"""
"""注意点:针对form表单有action地址的情况,可以直接请求action,参考github2.py"""
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()
commit = response.xpath("//input[@name='commit']/@value").extract_first()
utf8 = response.xpath("//input[@name='utf8']/@value").extract_first()
webauthn_support = response.xpath("//input[@name='webauthn-support']/@value").extract_first()
# login = response.xpath("//input[@name='login']/@value").extract_first()
# password = response.xpath("//input[@name='password']/@value").extract_first()
post_data = dict(
login="aa@163.com",
password="aaaaaa",
commit=commit,
utf8=utf8,
authenticity_token=authenticity_token,
webauthn_support=webauthn_support
)
yield scrapy.FormRequest(
"https://github.com/session", #发送post请求登录接口
formdata=post_data,
callback=self.after_login
) # 另外一种发送post请求的方式:指定请求方式为POST
# yield scrapy.Request(
# "https://github.com/session",
# method='POST',
# body=
# ) def after_login(self,response):
# 对于不太确认的情况,可以先把响应保存到本地,然后进行分析
# with open('aa.html', 'w', encoding='utf-8') as f:
# f.write(response.body.decode())
print("*"*30)
print(re.findall('wed', response.body.decode()))
print("*"*30)

github2.py

# -*- coding: utf-8 -*-
import scrapy
import re class Github2Spider(scrapy.Spider):
"""对于form表单有action地址的情况,可以直接请求action,只用传用户名密码即可"""
name = 'github2'
allowed_domains = ['github.com']
start_urls = ['https://github.com/login'] # 注意:针对网页中有多个form的情况,可以通过传参来指定form,如formname、formid、formnumber、formxpath
def parse(self, response):
yield scrapy.FormRequest.from_response(
response, # scrapy会从response中自动寻找form表单
formdata={"login": "aa@163.com", "password": "aaaaaa"}, # key对应页面上的name,value对应实际的值
callback=self.after_login
) def after_login(self, response):
print("*" * 30)
print(re.findall('wed', response.body.decode()))
print("*" * 30)

scrapy爬虫系列之六--模拟登录的更多相关文章

  1. Scrapy用Cookie实现模拟登录

    模拟登录是爬取某些站点内容的一个关键,有些网站(特别是论坛类),不登录的话,一个数据也拿不到. 模拟登录有这样几个关键: 弄清楚登录的url一些网站打开出现登录的页面,地址栏大多数不是登录提交表单的u ...

  2. Python网络爬虫实战(四)模拟登录

    对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...

  3. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  4. 《转载》python爬虫实践之模拟登录

    有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录.   浏览器访问服务器的过程   在用户访问网页时,不论是通过URL输入域名或IP ...

  5. Python 爬虫实战5 模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...

  6. scrapy爬虫系列之七--scrapy_redis的使用

    功能点:如何发送携带cookie访问登录后的页面,如何发送post请求登录 简单介绍: 安装:pip3 install scrapy_redis 在scrapy的基础上实现了更多的功能:如reques ...

  7. scrapy爬虫系列之开头--scrapy知识点

    介绍:Scrapy是一个为了爬取网站数据.提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取.Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度. 0.说明: ...

  8. scrapy爬虫系列之一--scrapy的基本用法

    功能点:scrapy基本使用 爬取网站:传智播客老师 完整代码:https://files.cnblogs.com/files/bookwed/first.zip 主要代码: ff.py # -*- ...

  9. scrapy爬虫系列之二--翻页爬取及日志的基本用法

    功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...

随机推荐

  1. TextView不用获取焦点也能实现跑马灯

    1.写一个类继承TextView package com.example.tt; import android.content.Context; import android.graphics.Rec ...

  2. 【Java面试题】47 heap和stack有什么区别

    java的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个 ...

  3. android获取手机屏幕分辨率

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceSt ...

  4. OCX控件打包成CAB并实现数字签名过程

      OCX打包CAB并签名过程 一.打包cab 制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件.使用inf文件将这些东西都写进去. 1.制作inf文 ...

  5. Jquery实现上下移动和排序代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  6. linux mint 19解决 输入法问题

    安装搜狗后出现 You're currently running Fcitx with GUI, but fcitx-configtool couldn't be found, the package ...

  7. ubuntu 执行make menuconfig ARCH=arm

    1.ubuntu 执行make menuconfig ARCH=arm出错了!! *** Unable to find the ncurses libraries or the *** require ...

  8. CentOS7.1 Liberty云平台之Dashboard篇(7)

    控制节点: 一.安装及配置Dashboard 1.安装dashboard相关包 yum install openstack-dashboard 2.配置/etc/openstack-dashboard ...

  9. GIS-003-在线地图下载及应用

    目前在线地图有谷歌.高德.百度.Bing.soso.天地图.OpenStreet.ArcGIS Online等.在企业应用中,一般需要物理网络隔绝,就有必要下载地图数据之后模拟发布,可以选择下载谷歌影 ...

  10. Python 流程控制:if

    语法: if 判断条件1: # 如果判断条件1成立,就执行语句1 语句1... if 判断条件1: # 如果判断条件1成立,就执行语句1,否则执行语句2 语句1... else: 语句2... if ...