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 = {'CookiesDemo': 'python'}

    def start_requests(self):

        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”创建爬虫文件。如下图:

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

; 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):

        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

from scrapy.crawler import CrawlerProcess

from scrapy.utils.project import get_project_settings

if __name__=='__main__':

    process = CrawlerProcess(get_project_settings())

    process.crawl('cookieSpider')

    process.start()

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


class CookiesdemoMiddleware(object):

    def __init__(self, cookies_str):
        self.cookies_str = cookies_str

    @classmethod
    def from_crawler(cls, crawler):
        return cls(

            cookies_str = crawler.settings.get('COOKIES_DEMO')
            )

    cookies = {}
    def process_request(self, request, spider):

        for cookie in self.cookies_str.split(';'):

            key, value = cookie.split('=', 1)

            self.cookies.__setitem__(key, value)

        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()

        self.type = crawler.settings.get('RANDOM_UA_TYPE', 'chrome')

    @classmethod
    def from_crawler(cls, crawler):

        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 = {

    'cookiesDemo.middlewares.CookiesdemoMiddleware': 201,

   'cookiesDemo.middlewares.RandomHeaderMiddleware':202,

   'cookiesDemo.middlewares.CookiesdemoDownloaderMiddleware': None,
}

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)

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

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

Original: https://blog.csdn.net/weixin_41905135/article/details/123016858
Author: Bruce_Liuxiaowei
Title: Scrapy爬虫框架-通过Cookies模拟自动登录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/698341/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球