Scrapy模拟登录信息
携带cookie模拟登录
- 需要在爬虫里面自定义一个
start_requests()的函数- 里面的内容:
def start_requests(self):
cookies = '真实有效的cookie'
yield scrapy.Request(
self.start_urls[0],
callback = self.paese,
cookies = cookies
)
下载中间件
- 只需在文件最下面定义自己的中间件即可
下载中间键里可以做很多内容:携带登录信息,设置user-agent,添加代理等
- 使用前要在settings里面设置一下
- 数字代表权重
projectname.middlewares.DownloadMiddlewareName
DOWNLOADER_MIDDLEWARES = {
'superspider.middlewares.SuperspiderDownloaderMiddleware': 543,
}
- 设置user-agent
process_request
定义一个名为RandomUserAgentMiddleware的下载中间件
from fake_useragent import UserAgent
class RandomUserAgentMiddleware:
def process_request(self, request, spider):
##### 还可以为不同爬虫指定不同的中间件
if spider.name == 'spider1':
ua = UserAgent()
request.headers["User-Agent"] = ua.random
在settings里导入
DOWNLOADER_MIDDLEWARES = {
'superspider.middlewares.RandomUserAgentMiddleware': 543
}
- 审核user-agent
process_response- 需要返回response
- 在settings里导入
class UserAgentCheck:
def process_response(self, request, response, spider):
print(request.headers['User-Agent'])
return response
DOWNLOADER_MIDDLEWARES = {
'superspider.middlewares.RandomUserAgentMiddleware': 543,
'superspider.middlewares.UserAgentCheck': 544
}
- 设置代理
- 需要在request的meta信息中添加proxy字段
- 添加代理的形式:协议+IP+端口
- settings里导入
class ProxyMiddleware:
def process_request(self, request, spider):
if spider.name == 'spider0':
request.meta["proxy"] = "http://ip:port"
模拟登录GitHub
自己构造表单模拟登录 使用 FormRequest
- 明确要yield的内容,并交给下一个函数处理
# -*- coding: utf-8 -*-
import scrapy
class Spider0Spider(scrapy.Spider):
name = 'spider0'
allowed_domains = ['github.com']
start_urls = ['https://github.com/session']
def parse(self, response):
yield scrapy.FormRequest(
"https://github.com/session",
formdata=,
callback=self.after_login
)
def after_login(self, response):
pass
- formdate的构造

# -*- coding: utf-8 -*-
import scrapy
class Spider0Spider(scrapy.Spider):
name = 'spider0'
allowed_domains = ['github.com']
start_urls = ['https://github.com/session']
def parse(self, response):
form = {
'utf8': "✓",
'authenticity_token': response.xpath(
"//*[@id='unsupported-browser']/div/div/div[2]/form/input[2]/text()").extract_first(),
'ga_id': response.xpath('//*[@id="login"]/form/input[3]/@value').extract_first(),
'login': "",
'password': "",
'webauthn-support': 'supported',
'webauthn-iuvpaa-support': 'supported',
response.xpath('//*[@id="login"]/form/div[3]/input[5]/@name').extract_first(): "",
'timestamp': response.xpath("//*[@id='login']/form/div[3]/input[6]/@value").extract_first(),
"timestamp_secret": response.xpath("//*[@id='login'']/form/div[3]/input[7]/@value").extract_first(),
"commit": "Sign in"
}
print(form)
yield scrapy.FormRequest(
"https://github.com/session",
formdata=form,
callback=self.after_login
)
def after_login(self, response):
pass
自动寻找form表单中的信息
# -*- coding: utf-8 -*-
import scrapy
class Spider0Spider(scrapy.Spider):
name = 'spider0'
allowed_domains = ['github.com']
start_urls = ['https://github.com/session']
def parse(self, response):
yield scrapy.FormRequest.from_response(
response,
formdata={"login": "", "password":""},
callback=self.after_login
)
def after_login(self, response):
print(response.text)
Scrapy模拟登录信息的更多相关文章
- scrapy模拟登录微博
http://blog.csdn.net/pipisorry/article/details/47008981 这篇文章是介绍使用scrapy模拟登录微博,并爬取微博相关内容.关于登录流程为嘛如此设置 ...
- 利用scrapy模拟登录知乎
闲来无事,写一个模拟登录知乎的小demo. 分析网页发现:登录需要的手机号,密码,_xsrf参数,验证码 实现思路: 1.获取验证码 2.获取_xsrf 参数 3.携带参数,请求登录 验证码url : ...
- scrapy模拟登录
对于scrapy来说,也是有两个方法模拟登陆: 直接携带cookie 找到发送post请求的url地址,带上信息,发送请求 scrapy模拟登陆之携带cookie 应用场景: cookie过期时间很长 ...
- python爬虫之scrapy模拟登录
背景: 初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML.json数据,但是忽略了很多的一个问题,有很多的网站为了反爬虫,除了需要高可用代理IP地址池外,还需要登录.例如知乎 ...
- Scrapy模拟登录赶集网
1.打开赶集网登录界面,先模拟登录并抓包,获得post请求的request参数 2. 我们只需构造出上面的参数传入formdata即可 参数分析: setcookie:为自动登录所传的值,不勾选时默认 ...
- scrapy 基础组件专题(十二):scrapy 模拟登录
1. scrapy有三种方法模拟登陆 1.1直接携带cookies 1.2找url地址,发送post请求存储cookie 1.3找到对应的form表单,自动解析input标签,自动解析post请求的u ...
- Scrapy模拟登录知乎
建立项目 scrapy startproject zhihu_login scrapy genspider zhihu www.zhihu.com 编写spider 知乎的登录页url是http:// ...
- Scrapy模拟登录GitHub
d: 进入D盘 scrapy startproject GitHub 创建项目 scrapy genspider github github.com 创建爬虫 编辑github.py: # -*- c ...
- scrapy 模拟登录后再抓取
深度好文: from scrapy.contrib.spiders.init import InitSpider from scrapy.http import Request, FormReques ...
随机推荐
- 运行redis数据库
启动redis服务器:redis-server /usr/local/redis-5.0.5/etc/redis.conf 关闭: redis-cli shutdown启动客户端:进入bin文件夹,输 ...
- H - Bone Collector
H - Bone Collector Many years ago , in Teddy's hometown there was a man who was called "Bone Co ...
- 解决 node-sass 安装失败
在项目下新建.npmrc文件内容如下: sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ phantomjs_cdnurl=http ...
- 【tensorflow2.0】自动微分机制
神经网络通常依赖反向传播求梯度来更新网络参数,求梯度过程通常是一件非常复杂而容易出错的事情. 而深度学习框架可以帮助我们自动地完成这种求梯度运算. Tensorflow一般使用梯度磁带tf.Gradi ...
- Netty 中的 handler 和 ChannelPipeline 分析
上一节我们讲了 Netty 的启动流程,从启动流程入手分析了 Reactor 模型的第一步:channel 如何绑定 Selector.然后讲到了 EventLoop 在启动的时候发挥了什么作用.整个 ...
- PTA | 1029 旧键盘 (20分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在 2 行中分别给出应该输入的文字.以及 ...
- Shell:Day10
shell脚本:明白一点:shell脚本本身是一个工具 在写shell脚本之前,就要明白:这个功能能到底如何实现? curl 访问文件源代码,查看网站状态: 才能通过shell(bash)所提供的逻辑 ...
- Shell:Day04.笔记
grep与正则表达式: 1.grep程序 Linux下有文本处理三剑客 - - grep sed awk grep:文本 行 过滤工具 sed:文本 行 编辑器(流编辑器) awk:报告生成器(做文本 ...
- linux被当矿机排查案例
1.发现服务器变的特别卡,正常服务运行很慢. 到服务器上查询一番发现top下发现 bashd的进程占用100%CPU了. find /-name bashd* //第一次查询文件占用目录kil ...
- matplotlib中的基本概念
有外语基础的朋友看这里: matplotlib官方文档 Figure(图像): 组成部分