首先让我说,我是一个初学者在刮
我有一个网站,需要先登录,然后才能使用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网站。如果您能提供任何帮助或指出正确的方向,我们将不胜感激
短暂性脑缺血发作
好的,像往常一样,在花了几个小时的搜索和更多的实验之后,我找到了答案,现在我支持使用Scrapy从JS创建的表中抓取数据的登录。和往常一样,我把事情复杂化了
下面是我的代码,它基于上述内容,简单地使用Splash登录,然后开始抓取
这将利用工具SplashFormRequest而不是Scrapy的FormRequest使用Splash登录
相关问题 更多 >
编程相关推荐