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邮件服务器postfix
检查linux是否有安装postfix和dovecot 检查命令如下: Rpm -qa |grep postfix; Rpm –qa |grep dovecot; 如果没有显示任何数据,表明没有安 ...
- PHP截断函数mb_substr()
提示:mb_substr在于php中是默认不被支持的我们需要在在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到;extension=php_mbstring.dll ...
- <img/>标签onerror事件在IE下的bug和解决方法
IE下打开网页时,会弹出“Stack overflow at line: 0”的弹框.经分析,这个bug是由于img标签的onerror事件引起的.程序中用到的代码片段如下:正常情况下显示src所指路 ...
- Android SDK的安装教程
Android4.1虽说已经发布了好些天,但由于的我手机比较坑,系统依旧保持在2.3.4.0的都是可望不可即的了,就别说4.1.由于资金的问题,没法换手机,只能另想方法,通过在笔记本上装andro ...
- MFC中编辑框Edit Control添加“变量”后
- Socket无连接简单实例
使用无连接的套接字,我们能够在自我包含的数据包里发送消息,采用独立的读函数读取消息,读取的消息是使用独立的发送函数发送的.但是UDP数据包不能保证可靠传输,存在许多的因素,比如网络繁忙等等,都有可能阻 ...
- A complete example using RAISE_APPLICATION_ERROR : raise_application_error
from:http://www.java2s.com/Tutorial/Oracle/0480__PL-SQL-Programming/AcompleteexampleusingRAISEAPPLIC ...
- UVa 10450 - World Cup Noise
题目:构造一个01串,使得当中的1不相邻,问长度为n的串有多少中. 分析:数学,递推数列. 设长度为n的串有n个.则有递推关系:f(n)= f(n-1)+ f(n-2): 长度为n的结束可能是0或者1 ...
- BigDecimal类(精度计算类)的加减乘除
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- join()函数的用法【python】
转自:http://www.jb51.net/article/63598.htm