Scrapy爬虫框架-通过Cookies模拟自动登录

简介: Scrapy爬虫框架-通过Cookies模拟自动登录

Scrapy爬虫框架-通过Cookies模拟自动登录
熟练使用Cookies在编写爬虫程序时是非常重要的,Cookies代表用户的信息,如果需要爬取登录后网页的信息,就可以将Cookies信息保存,然后在第二次获取登录后的信息时就不需要再次登录了,直接使用Cookies进行登录即可。

1.3.1 在Scrapy中,如果想在Spider(爬虫)文件中直接定义并设置Cookies参数时,可以参考以下示例代码:

import scrapy

class CookiespiderSpider(scrapy.Spider):
    # 爬虫名称
    name = 'cookieSpider'
    # 域名列表
    allowed_domains = ['httpbin.org/get']
    # 请求初始化列表
    start_urls = ['http://httpbin.org/get']
    # 模拟Cookies信息
    cookies = {
   'CookiesDemo': 'python'}

    def start_requests(self):
        # 发送网络请求,请求地址为start_urls列表中的第一个地址
        yield scrapy.Request(url=self.start_urls[0], cookies=self.cookies, callback=self.parse)

    # 响应信息

    def parse(self, response):
        # 打印响应结果
        print(response.text)
        pass

程序运行结果如下:

{
   
  "args": {
   }, 
  "headers": {
   
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate", 
    "Accept-Language": "en", 
    "Cookie": "CookiesDemo=python",     
    "Host": "httpbin.org", 
    "User-Agent": "Scrapy/2.5.1 (+https://scrapy.org)", 
    "X-Amzn-Trace-Id": "Root=1-620f78be-7272752a5bfe1e53464471ff"
  }, 
  "origin": "122.143.185.159", 
  "url": "http://httpbin.org/get"
}

注 意

以上示例代码中的Cookies是一个模拟测试所使用的信息,并不是一个真实有效的Cookies信息,所以在使用时需要将Cookies信息设置为爬取网站对应的真实Cookies。

1.3.2 通过Cookies模拟自动登录
在Scrapy中除了使用以上示例代码中的方法设置Cookies以外,也可以使用自定义中间件的方式设置Cookies。以爬取某网站登录后的用户名信息为列,具体实现步骤如下:

1.3.2.1 首先在自己选定的文件夹(本例是’/Users/liuxiaowei/PycharmProjects/爬虫练习/Scrapy爬虫框架’)下执行命令“scrapy startproject cookiesDemo“创建项目,然后执行”cd cookiesDemo“执行“scraps genspider cookieSpider douban.com“创建爬虫文件。如下图:
image.png

1.3.2.2 在cookieSpider.py文件中编写爬虫代码,代码如下:

import scrapy

class CookiespiderSpider(scrapy.Spider):
    # 爬虫名称
    name = 'cookieSpider'
    # 域名列表
    allowed_domains = ['douban.com']
    # 请求初始化列表
    start_urls = ['http://douban.com/']

    def start_requests(self):
        # 发送网络请求,请求地址为start_urls列表中的第一个地址
        yield scrapy.Request(url=self.start_urls[0],  callback=self.parse)

    # 响应信息
    def parse(self, response):
        # 打印登录后的用户名信息
        print(response.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()').extract_first())

        pass
# 导入CrawlerProcess类
from scrapy.crawler import CrawlerProcess
# 导入获取项目设置信息
from scrapy.utils.project import get_project_settings


# 程序入口
if __name__=='__main__':
    # 创建CrawlerProcess类对象并传入项目设置信息参数
    process = CrawlerProcess(get_project_settings())
    # 设置需要启动的爬虫名称
    process.crawl('cookieSpider')
    # 启动爬虫
    process.start()

1.3.2.3 在middlewares.py文件中,定义用于格式化与设置Cookie的中间件,代码如下:

# 自定义Cookies中间件
class CookiesdemoMiddleware(object):
    # 初始化
    def __init__(self, cookies_str):
        self.cookies_str = cookies_str

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            # 获取配置文件中的Cookies信息
            cookies_str = crawler.settings.get('COOKIES_DEMO')
            )
    # 保持格式化后的Cookies
    cookies = {
   }
    def process_request(self, request, spider):
        # 通过';'分割Cookies字符串
        for cookie in self.cookies_str.split(';'):
            # 将key与值进行分割
            key, value = cookie.split('=', 1)
            # 将分割后的数据保存至字典中
            self.cookies.__setitem__(key, value)
            # 设置格式化以后的Cookies
        request.cookies = self.cookies

1.3.2.4 在middlewares.py文件中,定义随机设置请求头的中间件。代码如下:

# 导入请求头类
from fake_useragent import UserAgent
# 自定义随机请求头的中间件
class RandomHeaderMiddleware(object):
    # 随机请求头对象
    def __init__(self, crawler):
        self.ua = UserAgent()
        # 如果配置文件中不存在就使用默认的Google Chrome请求头
        self.type = crawler.settings.get('RANDOM_UA_TYPE', 'chrome')

    @classmethod
    def from_crawler(cls, crawler):
        # 返回cls()实例对象
        return cls(crawler)

    # 发送网络请求时调用该方法
    def process_request(self, request, spider):
        # 设置随机生成的请求头
        request.headers.setdefault('User-Agent', getattr(self.ua, self.type))

1.3.2.5 打开settings.py 文件,在该文件中首先将DOWNLOADER_MIDDLEWARES配置信息中的默认配置信息禁用,然后添加用于处理Cookies与随机请求头的配置信息并激活,最后定义从浏览器中获取的Cookies信息,代码如下:

DOWNLOADER_MIDDLEWARES = {
   
    # 启动自定义cookies中间件
    'cookiesDemo.middlewares.CookiesdemoMiddleware': 201,
    # 启动自定义随机请求头中间件
   'cookiesDemo.middlewares.RandomHeaderMiddleware':202,
    # 禁用默认生成的配置信息
   'cookiesDemo.middlewares.CookiesdemoDownloaderMiddleware': None,
}
# 定义从浏览器中获取的Cookies
COOKIES_DEMO = '此处填写您自己登录网页后中的Cookie信息'

程序运行结果如下:

2022-02-18 21:17:49 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.douban.com/> (referer: None)
bruce_liu的帐号
2022-02-18 21:17:49 [scrapy.core.engine] INFO: Closing spider (finished)

image.png

与抓包工具里显示的登录用户信息完全一致。

相关文章
|
1月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
8月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
778 0
分布式爬虫框架Scrapy-Redis实战指南
|
7月前
|
数据采集 前端开发 JavaScript
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
497 6
|
6月前
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
7月前
|
数据采集 存储 Web App开发
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
本教程基于Feapder框架,讲解如何构建轻量级爬虫采集豆瓣电影数据。通过配置代理IP、Cookie与User-Agent,实现企业级数据管道能力,包括动态请求与信息提取(如电影名称、导演、演员等)。适合具备Python基础及爬虫原理知识的读者,提供从环境搭建到代码实现的完整流程,并分析常见错误与解决方法,助力高效开发。
310 1
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
502 4
|
数据采集 中间件 API
在Scrapy爬虫中应用Crawlera进行反爬虫策略
在Scrapy爬虫中应用Crawlera进行反爬虫策略
|
7月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
7月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
994 31