我是scrapy的新手并试图从fandromeda.com网站抓取一些数据,但我需要首先进行身份验证才能开始抓取以下网址所需的数据
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-01 10:53:44 [scrapy] DEBUG:Crawled(200)https://fandromeda.com/user/signin?handle=&username=xxxx&password=xxxx> (引用者:https://fandromeda.com/user/signin)
我尝试在响应强制scrapy时使用方法参数来使用POST方法
scrapy.FormRequest.from_response(response,method="POST",formdata=form_data,callback=self.parse_login_response)
现在scrapy发布了帖子请求,但结果有所不同。 有人能指出我需要做什么的正确方向吗?
答案 0 :(得分:0)
他们的登录页面接受JSON而不是带有值的简单表单。
而不是formdata=form_data
使用formdata=json.dumps(form_data)