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

  • Nicht in der Lage, Firefox von Selen in Python auf AWS Maschine aufrufen
  • Regex-Muster in Python für das Analysieren von HTML-Titel-Tags
  • Wie kratzt man den Inhalt im Popup-Fenster mit Javascript: Links mit scrapy
  • Web-Crawler, um aus Listenelementen zu extrahieren
  • WebScraping mit BeautifulSoup oder LXML.HTML
  • Wie man scrapy Spinnen aus Skript zu protokollieren
  • BeautifulSoup Scraping: Laden von div statt des Inhalts
  • So behandeln Sie IncompleteRead: in python
  • Pass Scrapy Spider eine Liste von URLs zu crawlen über. Txt-Datei
  • Warnung: Einige Zeichen konnten nicht decodiert werden und wurden durch ERSATZZEICHEN ersetzt
  • BeautifulSoup inkonsistentes Verhalten
  • Python ist die beste Programmiersprache der Welt.