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 主要 ...
随机推荐
- (转)学习linux的几本书
成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标.根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍.Java 程序员的 2 ...
- Java基础--生成验证码
HTML <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnco ...
- 视觉SLAM漫淡
视觉SLAM漫谈 1. 前言 开始做SLAM(机器人同时定位与建图)研究已经近一年了.从一年级开始对这个方向产生兴趣,到现在为止,也算是对这个领域有了大致的了解.然而越了解,越觉得这个方向难度很 ...
- NHibernate初学三之条件查询(Criteria Queries)与AspNetPager分页实例
NHibernate除了SQL与HQL两种查询操作外,还有一种就是条件查询Criteria,本文将从网上整理一些Criteria的理论及小实例,最后通过一个结合AspNetPager分页来加深理解,必 ...
- 获取form表单数据
var modelObj = {}; var modelFieldsArray = $('#AddMusic').serializeArray(); $.each(modelFieldsArray, ...
- Thinkphp 修改U方法按路由规则生成url
tp开户路由后,使用U方法是不会按路由规则生成url的,一般我们是要手动修改模版,把里面的U方法去掉,手动修改链接,如果是已经写好的程序,后期才添加路由,修改起链接就太麻烦了 今天无聊就修改了一下U方 ...
- callable()
callable() 用于判断一个对象是否是可调用的,函数或类都可以被调用 In [1]: callable('a') Out[1]: False In [2]: def fun(): ...: pa ...
- LLDB调试器
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNu ...
- 使用JS播放声音——SoundManager 2
<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>SoundDemo& ...
- android基础---->LruCache的使用及原理
在你应用程序的UI界面加载一张图片是一件很简单的事情,但是当你需要在界面上加载一大堆图片的时候,情况就变得复杂起来.Android为我们提供了LruCache,今天我们就来学习这个缓存的知识以及原理. ...