python實戰scrapy操作cookie爬取博客涉及browsercookie

browsercookie 知識鋪墊

第一個要瞭解的知識點是使用 browsercookie 獲取瀏覽器 cookie ,該庫使用命令 pip install browsercookie 安裝即可。

接下來獲取 firefox 瀏覽器的 cookie,不使用 chrome 谷歌瀏覽器的原因是在 80 版本之後,其 cookie 的加密方式進行瞭修改,所以使用 browsercookie 模塊會出現如下錯誤

win32crypt must be available to decrypt Chrome cookie on Windows

獲取 cookie 的代碼如下所示:

import browsercookie

firefox_cookiejar = browsercookie.firefox()

for c in firefox_cookiejar:
    print(c)

運行代碼,輸出如下格式內容。

Python 爬蟲 cookie 實戰博客,涉及 browsercookie 與 scrapy

獲取瞭 cookies 之後,就可以訪問之後登錄後才能訪問的頁面瞭(前提是在火狐瀏覽器登錄過一次)。

下面拿 某管理中心舉例,在火狐瀏覽器登錄過之後,使用 browsercookie 獲取 cookie 之後,就可以直接訪問後臺接口。

import browsercookie
import requests

firefox_cookiejar = browsercookie.firefox()

# for c in firefox_cookiejar:
#     print(c)

res = requests.get("https://img-home.csdnimg.cn/data_json/jsconfig/menu_path.json", cookies=firefox_cookiejar)
print(res.text)

可以直接獲取到後臺菜單。

Python 爬蟲 cookie 實戰博客,涉及 browsercookie 與 scrapy

使用 browsercookie 實現 自動化點贊

在 scrapy 框架中,已經內置瞭一個 CookiesMiddleware 用於處理 cookies,我們這次通過繼承 CookiesMiddleware ,然後使用 browsercookie 庫完成點贊器的研發(僅做瞭一個測試案例,沒有使用並發哦)

打開 middlewares.py 文件,編寫自定義的類:

from scrapy.downloadermiddlewares.cookies import CookiesMiddleware
import browsercookie
class BrowserCookiesDownloaderMiddleware(CookiesMiddleware):
    def __init__(self, debug=False):
        super().__init__(debug)
        self.load_browser_cookies()

    def load_browser_cookies(self):
        # 註意這個地方的名字叫做 firefox
        jar = self.jars['firefox']
        firefox_cookiejar = browsercookie.firefox()
        for cookie in firefox_cookiejar:
            jar.set_cookie(cookie)

上述類的核心內容是使用 browsercookie 對瀏覽器的 cookie 進行提取,存儲到 CookieJar 類型的字典 jars 中,後續請求的時候,在進行調用。

同步在 settings.py 文件中禁用默認的 CookiesMiddleware,啟用咱們自定義的新類。

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': None,
    'csdn.middlewares.BrowserCookiesDownloaderMiddleware': 543,
}

在編寫爬蟲核心函數,重點修改 Request 請求為 POST 請求,並且攜帶相關參數,meta={'cookiejar':COOKIEJAR}
代碼如下所示:

import scrapy
class ClikeSpider(scrapy.Spider):
    name = 'clike'
    allowed_domains = ['csdn.net']
    like_url = 'https://blog.csdn.net/phoenix/web/v1/article/like'
    def start_requests(self):
        data = {
            "articleId": "120845464",
        }
        yield scrapy.FormRequest(url=self.like_url, formdata=data, meta={'cookiejar': 'firefox'})
    def parse(self, response):
        print(response.json())

運行爬蟲之後,在日志中可以發現成功的點贊瞭。

Python 爬蟲 cookie 實戰博客,涉及 browsercookie 與 scrapy

以上就是python實戰scrapy操作cookie爬取博客涉及browsercookie的詳細內容,更多關於scrapy操作cookie爬取博客的資料請關註WalkonNet其它相關文章!

推薦閱讀: