功能点:如何发送携带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. 在windows下编译ffmpeg

    编译ffmpeg,我在网上找了很多相关的方法,但最后都没编译成功. 所以下面就记录下自己的编译方法吧,留着以后编译的时候做参考. 1.首先,下载编译工具MinGW+Msys,搭建编译环境.工具下载地址 ...

  2. 如何研究某个gene的ceRNA 网络

    研究人员针对 PTEN 这个关键的抑癌基因,来探究调控该基因表达的ceRNA 网络: 分析策略: 1)预测能调控该基因的miRNAs 通过miRanda 软件预测和实验验证相结合的方式,挑选出 miR ...

  3. 真想用c#开发个 wp五笔输入法。。。奈何网上资料太少,源码都是c++写的。求大神指点!!!

    真想用c#开发个 wp五笔输入法...奈何网上资料太少,源码都是c++写的.求大神指点!!!!

  4. sublime text 删除插件

    1.ctrl+shift+p 输入remove package 选择要删掉的插件即可 2.去掉产生临死文件的插件:phptools

  5. Adobe Acrobat 不能打开在线pdf。Adobe Acrobat 应用程序正在被终止,因为内存错误

    Adobe Acrobat 应用程序正在被终止,因为内存错误. Adobe Acrobat 不能打开在线pdf. 当出现上面两种错误时. 原因可能是Acrobat的更新有问题. 解决方法:打开C:\D ...

  6. TFS2010 分支问题

    最近在使用TFS2010分支的时候,对项目怎么分支都无法分支. 原因:TFS只支持对文件夹分支不针对项目分支 解决:项目建一个文件夹 把项目移动进去,再进行分支即可. 提示:Nuget会出现意外的路径 ...

  7. Effective C++ Item 35 Consider alternatives to virtual functions

    考虑你正在为游戏人物设计一个继承体系, 人物有一个函数叫做 healthValue, 他会返回一个整数, 表示人物的健康程度. 由于不同的人物拥有不同的方式计算他们的健康指数, 将 healthVal ...

  8. 安装php5.5 mssql扩展报错

    ./configure 后,直接make可能会出现libtool: link: `php_mssql.lo' is not a valid libtool object 的错误. make clean ...

  9. python2.0_s12_day11_SqlAlchemy使用介绍

    SqlAlchemy ORM ORM的解释; 简单点:对象关系映射. 需求:我们写一个主机管理,把主机信息存在数据库,一开始我们编程不熟练的时候,执行命令时候要调用数据库,会把相应的SQL语句写到代码 ...

  10. [SQL]躺着也中枪的datetime类型

    写在前面 本来这个东西,我是不想在这里总结的,今天有初学者的朋友问我了,那就不得不说说了,你肯定也踩过这样的坑,没遇到,说明你运气好,编码习惯好.那还是言归正传吧.避免你中枪,还是扫一眼这篇文章吧. ...