Scrapy 中如何使用 Cookies 进行爬虫登录?

2023-04-17 00:00:00 爬虫 登录 如何使用

Scrapy 中使用 Cookies 进行爬虫登录,可以在登录页面获取到 Cookies ,然后将其设置到请求头部中,模拟登录成功后的状态。
以下是一个简单的 Scrapy 爬虫登录示例,网站为 pidancode.com,需要登录才能访问数据:
1. 创建 Scrapy 项目
在终端中执行以下命令创建新的 Scrapy 项目:

scrapy startproject cookie_login
  1. 编写登录爬虫
    在 cookie_login 目录下创建一个名为 login_spider.py 的文件,编写登录爬虫代码:
import scrapy
class LoginSpider(scrapy.Spider):
    name = 'login'
    start_urls = ['https://pidancode.com/login/']
    def parse(self, response):
        # 获取登录所需的 csrf_token
        csrf_token = response.xpath('//input[@name="csrfmiddlewaretoken"]/@value').extract_first()
        # 构建登录请求
        data = {
            'csrfmiddlewaretoken': csrf_token,
            'username': 'your_username',
            'password': 'your_password'
        }
        yield scrapy.FormRequest(url='https://pidancode.com/login/', formdata=data, callback=self.after_login)
    def after_login(self, response):
        # 登录成功后继续访问其他页面
        yield scrapy.Request(url='https://pidancode.com/profile/', callback=self.parse_profile)
    def parse_profile(self, response):
        # 获取登录后可访问页面的内容
        yield {
            'name': response.xpath('//h1/text()').extract_first()
        }

在上面的代码中,初始 URL 为登录页面, parse 方法中获取登录所需的 csrf_token ,然后构造登录请求,并在回调函数 after_login 中处理登录成功后的操作。接着通过回调方法 parse_profile 访问登录后可访问的页面及获取页面内容。
3. 编写 Scrapy Settings 配置
在项目的 settings.py 文件中添加以下配置:

ROBOTSTXT_OBEY = False
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
COOKIES_ENABLED = True

将 ROBOTSTXT_OBEY 设置为 False ,以允许访问网站 robots.txt 文件。设置 USER_AGENT ,以模拟流行的浏览器。将 COOKIES_ENABLED 设置为 True ,启用 cookies 功能。
4. 运行登录爬虫
在终端中执行以下命令启动爬虫:

scrapy crawl login

登录成功后,爬虫自动获取 Cookies,并在后续请求中将其携带,以模拟登录状态。可以通过上面的示例代码获取登录后可访问页面的内容,具体实现方式取决于所需抓取的页面结构。

相关文章