python实战scrapy操作cookie爬取博客涉及browsercookie
作者:梦想橡皮擦 发布时间:2023-08-13 16:56:00
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())
运行爬虫之后,在日志中可以发现成功的点赞了。
来源:https://blog.csdn.net/hihell/article/details/121281368
猜你喜欢
- 在WEB2.0这个词未出现之前,是没有所谓的WEB1.0之说的,那时候的互联网也是没有时代之分的,能上的网站不多,值得上的网站更不多,很多的
- 举个例子来说,要查找出2007-10-12至2007-10-31之间在网站上注册的会员,选择好日期后,点击“查询”按钮,发现2007-10-
- 先看一个js函数 function jsontest() { var json = [{'username':'cr
- python处理按钮消息的实例详解  
- 最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同
- 一个很简单的画像素画的小工具,有意思的地方在于可以把画的图案保存成数组,以方便之后快速还原出原图..<!DOCTYPE html PU
- 利用python查找电脑里的文件非常方便比如在我的电脑:D:\软件 文件夹里有非常非常多的软件。我忘记某个软件叫什么名字了,只记得文件名称里
- 在这个擦亮自己的眼睛去看SQL Server的系列中的第二篇中提过要写历史渊源,这里的历史主要描述的是数据库本身的历史与SQL Server
- 1、DataFrame返回的不是对象。2、DataFrame查出来的数据返回的是一个dataframe数据集。3、DataFrame只有遇见
- 抢票是并发执行多个进程可以访问同一个文件多个进程共享同一文件,我们可以把文件当数据库,用多个进程模拟多个人执行抢票任务db.tx
- 前几天,为了增强本站的SEO,着手把另一个域名:www.aspxhome.com下的所有页面301转向到www.cidianwang.com
- Pandas库十分强大,但是对于切片操作iloc, loc和ix,很多人对此十分迷惑,因此本篇博客利用例子来说明这3者之一的区别和联系,尤其
- 阅读上一篇:FrontPage2002简明教程四:网页超级链接 一、三种添加CSS的方式 在FrontPage 2002里可以通过三种方式给
- 翻译:用法:zeros(shape, dtype=float, order='C')返回:返回来一个给定形状和类型的用0填充
- Python可以使用 xml.etree.ElementTree 模块从简单的XML文档中提取数据。 为了演示,假设你想解析Planet P
- 方法一 <%dim total(7,3) total(1,0)="ASP之家"&n
- 使用 NetBox 可以方便的将 asp 应用编译成为独立运行的执行程序,完全摆脱 iis 的束缚,在几乎所有的 Windows
- 下载中间件在每一个scrapy工程中都有一个名为 middlewares.py 的文件,这个就是中间件文件其中下载中间件的类为 XxxDow
- 本文实例讲述了python更新列表的方法。分享给大家供大家参考。具体如下:aList = [123, 'abc', 4.56
- function chinese2unicode(Str) &nbs