将 Scrapy 中建立的会话 cookie 传递给 Splash 以用于抓取 js 页面
Passing session cookies established in Scrapy to Splash to utilize in scraping js page
首先说明一下,我是Scrapy的新手!
我有一个网站需要先登录才能使用 Scrapy 抓取任何数据。我要抓取的数据是 JavaScript 登录后生成的。
我已经成功使用Scrapy登录了。我现在的问题是,我已经登录并拥有必要的 cookie 以继续向网站发出请求,当在我想用 Scrapy 抓取的报告页面上调用 SplashRequest 时,如何将这些 cookie 传输到 Splash?我读过的文档对我来说很难理解,而且看起来太笼统了。我找过例子,但一无所获。
我应该使用 Scrapy 登录然后将 cookie 传递给 Splash 还是我应该通过 Splash 来完成这一切的想法是错误的?如果是这样,我如何在 Splash 中传递用户名和密码变量?
这是我的 Scrapy 代码
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}
这暂时被简化为 return 随机标签,这样我就知道我已经登录并且 Scrapy 正在查看报告。发生的事情是它正在登录,但当然,一旦我调用 Splash 来呈现 javaScript 报告,Splash 将被重定向到登录而不是转到示例。com/reports 网站。任何帮助或正确方向的观点将不胜感激。
TIA
好的,像往常一样,在花费数小时的搜索和更多的实验之后,我找到了答案,现在我在使用 Scrapy 从创建的 JS 中抓取登录数据的背后 table。也像往常一样,我把事情复杂化了。
下面是我的代码,是在上面的基础上,简单的使用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.
首先说明一下,我是Scrapy的新手!
我有一个网站需要先登录才能使用 Scrapy 抓取任何数据。我要抓取的数据是 JavaScript 登录后生成的。
我已经成功使用Scrapy登录了。我现在的问题是,我已经登录并拥有必要的 cookie 以继续向网站发出请求,当在我想用 Scrapy 抓取的报告页面上调用 SplashRequest 时,如何将这些 cookie 传输到 Splash?我读过的文档对我来说很难理解,而且看起来太笼统了。我找过例子,但一无所获。
我应该使用 Scrapy 登录然后将 cookie 传递给 Splash 还是我应该通过 Splash 来完成这一切的想法是错误的?如果是这样,我如何在 Splash 中传递用户名和密码变量?
这是我的 Scrapy 代码
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}
这暂时被简化为 return 随机标签,这样我就知道我已经登录并且 Scrapy 正在查看报告。发生的事情是它正在登录,但当然,一旦我调用 Splash 来呈现 javaScript 报告,Splash 将被重定向到登录而不是转到示例。com/reports 网站。任何帮助或正确方向的观点将不胜感激。
TIA
好的,像往常一样,在花费数小时的搜索和更多的实验之后,我找到了答案,现在我在使用 Scrapy 从创建的 JS 中抓取登录数据的背后 table。也像往常一样,我把事情复杂化了。
下面是我的代码,是在上面的基础上,简单的使用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.