2016-06-28 2 views
2

Я пытаюсь провести следующую Website , но с измененной валютой на 'SAR' в левой верхней форме, я попытался отправить запрос SCRAPY как это:Scrapy FormRequest, пытающийся отправить запрос на отправку (FormRequest) с помощью изменения валюты formdata

r = Request(url='https://www.mooda.com/en/', cookies=[{'name': 'currency', 
             'value': 'SAR', 
             'domain': '.www.mooda.com', 
             'path': '/'}, {'name':'country','value':'SA','domain': '.www.mooda.com','path':'/'}],dont_filter=True) 

и я до сих пор получить цену как ЭГ

In [10]: response.css('.price').xpath('text()').extract() 
Out[10]: 
[u'1,957 EG\xa3', 
u'3,736 EG\xa3', 
u'2,802 EG\xa3', 
u'10,380 EG\xa3', 
u'1,823 EG\xa3'] 

я также пытался отправить пост запрос с данными формы регламентированных так:

from scrapy.http.request.form import FormRequest 
url = 'https://www.mooda.com/en/' 
r = FormRequest(url=url,formdata={'selectCurrency':'https://www.mooda.com/en/directory/currency/switch/currency/SAR/uenc/aHR0cHM6Ly93d3cubW9vZGEuY29tL2VuLw,,/'}) 
fetch(r) 

еще никогда не будет работать, а также пытался использовать FormRequest.from_response(), но он никогда не будет работать, ID действительно как некоторые советы, им новое для Scrapy запросов формы, если кто-то может помочь, я бы благодарными

ответ

0

это все о фронтэнда печенья, я покажу вам, как сделать это с запросами первых, логика будет точно то же самое с Scrapy:

head = {  "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"} 
# 
import requests 
from bs4 import BeautifulSoup 

with requests.Session() as s: 
    soup = BeautifulSoup(s.get("https://www.mooda.com/en/").content) 
    r2 = s.get(soup.select_one("#selectCurrency option[value*=SAR]")["value"]) 
    r = s.get("https://www.mooda.com/en/", params={"currency": "sar"}, headers=head, cookies=dict(r2.cookies.items())) 
    soup2 = BeautifulSoup(r.content) 
    print(soup2.select_one(".price").text) 

Вы должны сделать запросы к URL-адресу по опции с идентификатором selectCurrency, вы затем передаете кукисы, возвращенные, когда вы сделаете свой запрос https://www.mooda.com/en?currency=sar. Нет сообщений, все получают запросы, но frontend cookie от get необходим.

Если запустить код, вы видите, это не дает нам правильные данные:

In [9]: with requests.Session() as s: 
    ...:   soup = BeautifulSoup(s.get("https://www.mooda.com/en/").content,"lxml") 
    ...:   r2 = s.get(soup.select_one("#selectCurrency option[value*=SAR]")["value"]) 
    ...:   r = s.get("https://www.mooda.com/en/", params={"currency": "sar"}, headers=head, cookies=dict(r2.cookies.items())) 
    ...:   soup2 = BeautifulSoup(r.content,"lxml") 
    ...:   print(soup2.select_one(".price").text) 
    ...:  

825 SR 

использованием SCRAPY:

class S(Spider): 
    name = "foo" 
    allowed_domains = ["www.mooda.com"] 
    start_urls = ["https://www.mooda.com/en"] 

    def parse(self, resp): 
     curr = resp.css("#selectCurrency option[value*='SAR']::attr(value)").extract_first() 
     return Request(curr, callback=self.parse2) 

    def parse2(self, resp): 
     print(resp.headers.getlist('Set-Cookie')) 
     return Request("https://www.mooda.com/en?currency=sar",cookies=cookies, callback=self.parse3) 

    def parse3(self, resp): 
     print(resp.css('.price').xpath('text()').extract()) 

Что, если вы бежите даст вам:

['frontend=c95er9h1at2srhtqu5rkfo13g0; expires=Wed, 28-Jun-2017 08:56:08 GMT; path=/; domain=www.mooda.com', 'currency=SAR; expires=Wed, 28-Jun-2017 08:56:08 GMT; path=/; domain=www.mooda.com'] 


[u'825 SR', u'1,575 SR', u'1,181 SR', u'4,377 SR', u'769 SR'] 

Получатель не возвращает ничего, он просто устанавливает cookie

+0

Большое спасибо, что было очень полезно, я не знал, что это так же просто, как запрос url = 'https: //www.mooda.com/en/directory/currency/switch/currency/SAR/uenc/aHR0cHM6Ly93d3cubW9vZGEuY29tL2VuL3Nob2VzL2JhbGxlcmluYXM,/', затем используя свои файлы cookie для запроса URL-адреса веб-сайта, спасибо за ваши усилия. –

+0

Не стоит беспокоиться, а не на самом деле самое очевидное решение, просто после того, как вы выясните, как;) –

Смежные вопросы