scrapy爬虫系列之六--模拟登录
功能点:如何发送携带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爬虫系列之六--模拟登录的更多相关文章
- Scrapy用Cookie实现模拟登录
模拟登录是爬取某些站点内容的一个关键,有些网站(特别是论坛类),不登录的话,一个数据也拿不到. 模拟登录有这样几个关键: 弄清楚登录的url一些网站打开出现登录的页面,地址栏大多数不是登录提交表单的u ...
- Python网络爬虫实战(四)模拟登录
对于一个网站的首页来说,它可能需要你进行登录,比如知乎,同一个URL下,你登录与未登录当然在右上角个人信息那里是不一样的. (登录过) (未登录) 那么你在用爬虫爬取的时候获得的页面究竟是哪个呢? 肯 ...
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
- 《转载》python爬虫实践之模拟登录
有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录. 浏览器访问服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP ...
- Python 爬虫实战5 模拟登录淘宝并获取所有订单
经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...
- scrapy爬虫系列之七--scrapy_redis的使用
功能点:如何发送携带cookie访问登录后的页面,如何发送post请求登录 简单介绍: 安装:pip3 install scrapy_redis 在scrapy的基础上实现了更多的功能:如reques ...
- scrapy爬虫系列之开头--scrapy知识点
介绍:Scrapy是一个为了爬取网站数据.提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取.Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度. 0.说明: ...
- scrapy爬虫系列之一--scrapy的基本用法
功能点:scrapy基本使用 爬取网站:传智播客老师 完整代码:https://files.cnblogs.com/files/bookwed/first.zip 主要代码: ff.py # -*- ...
- scrapy爬虫系列之二--翻页爬取及日志的基本用法
功能点:如何翻页爬取信息,如何发送请求,日志的简单实用 爬取网站:腾讯社会招聘网 完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip 主要 ...
随机推荐
- Huffman树
结点定义: /* * Huffman树结点定义 */ struct Node { ElementType weight; // 结点的权值 struct Node *leftChild; // 结点的 ...
- android中文api(79)——Gallery
前言 本章内容是 android.widget.Gallery,版本为Android 2.3 r1,翻译来自"henly.zhang",欢迎大家访问他的博客:http://www. ...
- python PIL 库处理文件
通过PIL库提供的API接口可以很方便的处理图像,功能十分强大: 最近有一个替换png背景色的需求,替换背景色的同时又不能够覆盖原来的文字,之前利用perl 的CD 模块一直没能够正确处理,最终用PI ...
- linux cp 复制文件夹
复制文件夹需要添加 -r 或 -R 参数(recursive: 递归的:循环的) 如 cp -r DIR_A DIR_B; 同理,rm 也一样. 如 rm -r DIR_B
- informatica中的workflow连接远程数据库
如果是远程oracle这样写 名称随便起,方便自己记住,后面用户名密码你都知道,再加上数据库的地址:端口/SID就可以了. 如10.33.2.208:1521/torcl
- 使用 MVVMLight 消息通知
欢迎阅读我的MVVMLight教程系列文章<关于 MVVMLight 设计模式系列> 在文章的其实我们就说了,MVVMLight的精华就是消息通知机制,设计的非常不错.这个东西在MVVML ...
- vuex的简单使用
使用vuex进行组件间数据的管理 npm i vuex -S main.js import Vue from 'vue' import App from './App.vue' import stor ...
- VS2015编译OpenSSL1.0.2源码
更多详细信息http://blog.csdn.net/YAOJINGKAO/article/details/53041165?locationNum=10&fps=1 1.下载安装编译必须的A ...
- 当新增页面和编辑页面使用同一jsp时
<c:if test="${type eq '1'}"><title>新增页面</title></c:if> <c:if te ...
- C++ primer(十三)--类继承、构造函数成员初始化、虚函数、抽象基类
一.基类 从一个类派生出另一个类时,原始类称为基类,继承类称为派生类. 派生类对自身基类的private成员没有访问权限,对基类对象的protected成员没有访问权限,对派生类对象的(基类之 ...