Python 爬虫 cookie 实战博客,涉及 browsercookie 与 scrapy

举报
梦想橡皮擦 发表于 2022/02/16 13:52:47 2022/02/16
【摘要】 本篇博客学习一下 scrapy 操作 Cookie browsercookie 知识铺垫第一个要了解的知识点是使用 browsercookie 获取浏览器 cookie ,该库使用命令 pip install browsercookie 安装即可。接下来获取 firefox 浏览器的 cookie,不使用 chrome 谷歌浏览器的原因是在 80 版本之后,其 cookie 的加密方式进行了...

本篇博客学习一下 scrapy 操作 Cookie

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)

运行代码,输出如下格式内容。

获取了 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)

可以直接获取到后台菜单。

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

运行爬虫之后,在日志中可以发现成功的点赞了。

写在后面

今天是持续写作的第 259 / 365 天。
期待 关注点赞评论收藏

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。