Scrapy FormRequest, versucht, eine Postanforderung (FormRequest) mit Währungsänderungsformular zu senden

Ich habe versucht, die folgende Website zu scrapy, aber mit der Währung geändert zu 'SAR' aus dem oberen linken Einstellungen Formular, versuchte ich senden eine scrapy Anfrage wie folgt:

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) 

Und ich bekomme immer noch den Preis als EG

 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'] 

Ich habe auch versucht, eine Post-Anfrage mit den angegebenen Formulardaten wie folgt zu senden:

 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) 

Immer noch würde es nie funktionieren, auch versucht, FormRequest.from_response () zu verwenden, aber es würde nie funktionieren, id wirklich wie einige Ratschläge, im neu zu scrapy Formularanfragen, wenn jemand helfen könnte, wäre ich dankbar

One Solution collect form web for “Scrapy FormRequest, versucht, eine Postanforderung (FormRequest) mit Währungsänderungsformular zu senden”

Es geht um das Frontend- Cookie, ich werde dir zeigen, wie man es mit Anfragen zuerst macht, die Logik wird genau das gleiche mit Scrapy sein:

 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) 

Sie müssen eine Anforderung an die URL unter der Option mit der ID selectCurrency , dann übergeben Sie die Cookies zurückgegeben, wenn Sie Ihre Anfrage an https://www.mooda.com/en?currency=sar . Es gibt keine Beiträge, es ist alles, was man verlangt, aber das Frontend- Cookie aus dem Get ist wichtig.

Wenn wir den Code ausführen, sehen Sie, dass es uns die korrekten Daten gibt:

 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 

Mit schrott:

 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()) 

Welches, wenn Sie laufen, wird Ihnen geben:

 ['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'] 

Der Weg zum Curr gibt nichts zurück, es setzt einfach den Cookie

  • Download von Dateien mit Python 3.4 von Google Patente
  • Lesen von dynamisch erzeugten Webseiten mit Python
  • Python, um Webseiten zu speichern
  • Abrufen einer Teilmenge von href's aus findall () in BeautifulSoup
  • Wie man Post-Daten in start_urls der scrapy Spinne sendet
  • Kratzen einer Website mit anklickbaren Inhalten in Python
  • Kratzen aller Texte mit Scrapy ohne zu wissen, Webseiten Struktur
  • Abrufen von Skriptseiten-URLs über Web-Scrape
  • Ein Array-Feld in scrapy.Item
  • Scrapy: ein einfacher Weg, um eine kleine Javascript-Funktion zu bekommen?
  • Ändern des Links in Pythonmechanismen
  • Python ist die beste Programmiersprache der Welt.