我是新来scrapy并试图从fandromeda.com网站凑一些数据fandromeda但我需要先进行身份验证之前,我可以开始刮所需的数据,是在以下网址无法验证使用scrapy
https://fandromeda.com/v2/event/results
我试图用from_response方法,以尝试登录到该网站
import scrapy
from scrapy.spiders import CrawlSpider
from scrapy.http import Request, FormRequest
from scrapy.selector import Selector
from fandromeda.items import FandromedaItem
class FandromedaC(CrawlSpider):
name = 'fandromeda_c'
allowed_domains = ['fandromeda.com']
start_urls = ['https://fandromeda.com/user/signin']
def parse(self, response):
sel = Selector(response)
sign_in = sel.xpath('//button[@type="submit"]/text()').extract()
if sign_in:
if sign_in[0] == "SIGN IN":
self.log("$$$$$$$$$$$$$$$$$$")
form_data = {'username': 'xxxx','password': 'xxxx' }
return scrapy.FormRequest.from_response(response,formdata=form_data,callback=self.parse_login_response)
def parse_login_response(self,response):
self.log("#####################")
self.log(response.status)
我希望被重定向到主页,并得到响应的内容,但我得到的是登录页面再次。
我注意到scrapy正在取得请求,而不是默认情况下发布。 2016年12月1日10点53分44秒[scrapy] DEBUG:爬(200)https://fandromeda.com/user/signin?handle= &用户名= XXXX &密码= XXXX>(引荐:https://fandromeda.com/user/signin)
我试图使用方法参数从响应迫使scrapy使用POST方法
scrapy.FormRequest.from_response(response,method="POST",formdata=form_data,callback=self.parse_login_response)
现在scrapy使POST请求但在结果的差异。 有人可以指出我需要做什么的正确方向吗?
非常感谢@Umair ..我会试试这个,让你知道结果并将其标记为答案。关于这个问题还有一个问题,是否可以扩展代码以对另一个页面进行额外的调用,例如“https://fandromeda.com/v2/event/results”。 Scrapy是否负责传递必要的参数,或者每次请求页面时都必须登录?只是不确定什么是正确的方式去随后的网页抓取。 – Neel
正如我已经告诉你,他们在他们的网站上使用了太多的AJAX。 https://fandromeda.com/v2/event/results链接也使用AJAX ....参见[screesnhot(http://imgur.com/a/ySRnX)他们送AJAX到https:// fandromeda .com/v2/event/result_json加载结果数据的网址 – Umair
一旦您使用scrapy登录,会话被创建并且cookie由scrapy自动维护,您在访问每个URL之前不必登录 – Umair