对于scrapy来说,也是有两个方法模拟登陆:
- 直接携带cookie
- 找到发送post请求的url地址,带上信息,发送请求
scrapy模拟登陆之携带cookie
应用场景:
- cookie过期时间很长,常见于一些不规范的网站
- 能在cookie过期之前把搜有的数据数据拿到
- 配合其他程序使用,比如其使用selenium把登陆之后的cookie获取到保存到本地,scrapy发送请求之前先读取本地cookie
class RenrensipderSpider(scrapy.Spider):
name = 'renrenspider'
allowed_domains = ['renren.com']
cookies = dict( # 自己定义cookies,字典形式
anonymid = 'j3jxk555-nrn0wh',
...
wp_fold = 0
)
def start_requests(self): # 重写start_request函数,指定start_urls的处理方式
start_urls = 'http://www.renre.com/'
yield scrapy.Request(start_urls,callback=self.parse, cookies=self.cookies) # 指定callback函数,同时携带cookie
def parse(self, response):
...
那么问题来了:如何知道我的cookie确定是在不同的解析函数中传递呢?
# Disable cookie(enaled by default)
# COOKIES_ENABLED = False # cookie在setting中默认是开启的
COOKIES_DEBUG = True # 在settings中添加该参数即可
# cookie能够在不同的解析函数中传递,前提也是COOKIES_ENABLED为True
终端效果入下:
[scrapy.downloadermiddlewares.cookies] DEBUG: Sending cookies to:
<GET http://zhibo.renren.com/top>
Cookie: anonymid=j3...