将在Scrapy中建立的会话cookie传递给Splash,以便在scraping js页面中使用

2024-05-28 19:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

首先让我说,我是一个初学者在刮

我有一个网站,需要先登录,然后才能使用Scrapy刮取任何数据。我将要抓取的数据是在登录后由JavaScript生成的

我已经成功地使用Scrapy登录。现在我的问题是,我已经登录并拥有必要的cookies,可以继续向网站发出请求。当我在报告页面上发出Splash请求时,我想用Scrapy刮一下,如何将这些cookies转移到Splash?我读过的文档对我来说很难理解,而且似乎太笼统了。我已经找了一些例子,但结果一无所获

我应该用Scrapy登录然后将cookies传递给Splash,或者我应该在Splash中一直这样做,这是我的思维过程错误吗?如果是这样,如何在Splash中传递用户名和密码变量

这是我的密码

import scrapy
from scrapy.http import FormRequest
from scrapy_splash import SplashRequest

class mySpider(scrapy.Spider):
     login_url = 'https://example.com/'
     name = 'reports'
     start_urls = [
     login_url
         ]

def parse(self, response):
    return FormRequest.from_response(response,formdata={
        'username': 'XXXXXX',
        'password': 'YYYYYY'
    },callback = self.start_requests)

def start_requests(self):
    url = 'https://example.com/reports'

    yield SplashRequest(url=url, callback=self.start_scraping)

def start_scraping(self, response):
    labels = response.css('label::text').extract()
    yield {'labeltext': labels}

这是目前简化的,只是为了返回随机标签,这样我就知道我已登录,而Scrapy正在查看报告。发生的情况是它正在登录,但当然,一旦我使用envoke Splash呈现javaScript报告,Splash就会被重定向到登录,而不是转到example.com/reports网站。如果您能提供任何帮助或指出正确的方向,我们将不胜感激

短暂性脑缺血发作


Tags: fromimportselfcomurl网站exampleresponse
1条回答
网友
1楼 · 发布于 2024-05-28 19:28:51

好的,像往常一样,在花了几个小时的搜索和更多的实验之后,我找到了答案,现在我支持使用Scrapy从JS创建的表中抓取数据的登录。和往常一样,我把事情复杂化了

下面是我的代码,它基于上述内容,简单地使用Splash登录,然后开始抓取

这将利用工具SplashFormRequest而不是Scrapy的FormRequest使用Splash登录

import scrapy
from scrapy_splash import SplashFormRequest
from ..items import UnanetTestItem

class MySpider(scrapy.Spider):
    login_url = 'https://example.com'
    name = 'Example'
    start_urls = [
    login_url
        ]

def parse(self, response):
    return SplashFormRequest.from_response(
        response,
        formdata={
        'username': 'username',
        'password': 'password'
        },
        callback = self.start_scraping)

def start_scraping(self, response):
#whatever you want to do from here.

相关问题 更多 >

    热门问题