Scrapy框架--cookie的获取/传递/本地保存

环境:Python3.6 + Scrapy1.4

我要实现的东西:1. 完成模拟登陆

????????2. 登陆成功后提取出cookie,然后保存到本地cookie.txt文件中

????????3. 再次使用时从本地的cookie.txt中读取cookie,省略模拟登陆.

看了一些关于Scrapy操作cookie的博客,写的大同小异(都不好使...).我总结一下我尝试出来的关于cookie的提取和传递的操作,亲测可用

Cookie的传递和提取

from scrapy.http.cookies import CookieJar    # 该模块继承自内置的http.cookiejar,操作类似

# 实例化一个cookiejar对象
cookie_jar = CookieJar()

# 首先是cookie的提取
class MySpider(scrapy.Spider):
    ....
    ....
    # 模拟登陆,之后调用一个检查是否登录成功的函数
    def login(self, response):
        ....
        return [scrapy.FormRequest(
            url=login_url,
            formdata = {‘username‘:xxx, ‘password‘:xxx},
            callback = self.check_login
        )]

def check_login(self, response):
    if 登录成功:
        # 到这里我们的登录状态已经写入到response header中的‘Set-Cookies‘中了,
        # 使用extract_cookies方法可以提取response中的cookie
        cookiejar.extract_cookies(response, response.request)
        # cookiejar是类字典类型的,将它写入到文件中
        with open(‘cookies.txt‘, ‘w‘) as f:
            for cookie in cookie_jar:
                f.write(str(cookie) + ‘\n‘)

# 有些情况可能在发起登录之前会有一些请求,会陆续的产生一些cookie,可以在第一次请求的时候将cookiejar写入到request的meta中进行传递
scrapy.Request(url, callback=self.xxx, meta={‘cookiejar‘: cookiejar})
# 之后每次需要传递这个cookiejar对象可以从response.meta中拿到
scrapy.Request(url, callback=self.xxx, meta={‘cookiejar‘: response.meta[‘cookiejar‘]})

看了不少博文中只是写将cookie添加到meta中,这样就可以在请求的过程中获取到cookie.我这样尝试过,cookiejar在多个请求-响应中流转后依然是空的,所以只能在需要的时候使用cookiejar.extract_cookies方法进行手动提取.

若哪位大神知道meta中的cookiejar自行获取cookie的方法,请评论指点,谢谢!

从本地文件中读取Cookie

     with open(‘cookies.txt‘, ‘r‘) as f:
         cookiejar = f.read()
         p = re.compile(r‘<Cookie (.*?) for .*?>‘)
         cookies = re.findall(p, cookiejar)
         cookies = (cookie.split(‘=‘, 1) for cookie in cookies)
         cookies = dict(cookies)

之后可以在第一次发起请求(start_request)时将cookie手动添加到scrapy.Requestcookies参数中,cookie在后续的请求中会自行流转.

scrapy.Request(url, callback=self.xxx, cookies=cookies)
时间: 2024-11-06 07:31:34

Scrapy框架--cookie的获取/传递/本地保存的相关文章

从网络获取图片本地保存

http://www.tc5u.com/csharp/2144235.htm http://www.sharejs.com/codes/csharp/2122 http://blog.csdn.net/hcf_force/article/details/21173343 https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx http://stackoverflow.com/questions/12960670/re

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

第三百三十三节,web爬虫讲解2-Scrapy框架爬虫-Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其

web爬虫讲解—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其他参数,cookie.url.表单内容等 yield Request()可以将一个新

android本地保存Cookie和还原到cookiestore

保存cookie,读取cookie以及判断cookie是否存在 ```java public class Local { private static SharedPreferences shared; public static void setShared(SharedPreferences shared) { Local.shared = shared; } public static void saveStrCookie(String cookie) { SharedPreference

获取远程图片保存到本地文件夹中

1 /** 2 * 抓取远程图片到本地,可以抓取不带有后缀的图片 3 * @author YanYing <[email protected]> 4 * @link bidianer.com 5 */ 6 class GrabImage{ 7 8 /** 9 * @var string 需要抓取的远程图片的地址 10 * 例如:http://www.bidianer.com/img/icon_mugs.jpg 11 * 有一些远程文件路径可能不带拓展名 12 * 形如:http://www.x

Python爬虫之cookie的获取、保存和使用【新手必学】

前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:huhanghao Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的.另外如果你刚学不久.对这方面还不熟,建议先去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里

python——Scrapy 框架

爬虫的自我修养_4 一.Scrapy 框架简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便. Scrapy 使用了 Twisted['tw?st?d](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求. Scrapy架构图(绿线是

爬虫----Scrapy框架

一.介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用于如数据挖掘.监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫. Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架.因此Scrapy使用了一

Python3爬虫(十八) Scrapy框架(二)

对Scrapy框架(一)的补充 Infi-chu: http://www.cnblogs.com/Infi-chu/ Scrapy优点:    提供了内置的 HTTP 缓存 ,以加速本地开发 .    提供了自动节流调节机制,而且具有遵守 robots.txt 的设置的能力.    可以定义爬行深度的限制,以避免爬虫进入死循环链接 .    会自动保留会话.    执行自动 HTTP 基本认证 . 不需要明确保存状态.    可以自动填写登录表单.    Scrapy 有一个 内置的中间件 ,