2016-07-06 21 views
2

Ich bin ein Anfänger mit Python, ich versuche ein Python-Programm zu erstellen, das Produktbeschreibungen von http://turnpikeshoes.com/shop/TCF00003 kratzen wird. Python hat viele Bibliotheken und ich bin mir sicher, viele Ansätze, um mein Ziel zu erreichen. Ich habe ein paar erfolgreiche Scrabes mit Anfragen gemacht, aber die Felder, nach denen ich gesucht habe, werden nicht angezeigt. Mit dem Chromes Inspector habe ich eine Ajax POST-Anfrage gefunden.Wie schabt PHP Ajax mit Python?

Hier ist mein Code

from lxml import html 
import requests 

url = 'http://turnpikeshoes.com/shop/TCF00003' 
#URL 
headers = {'user-agent': 'my-app/0.0.1'} 
#Header info sent to server 
page = requests.get(url, headers=headers) 
#Get response 
tree = html.fromstring(page.content) 
#Page Content 


ShortDsc = tree.xpath('//span[@itemprop="reviewBody"]/text()') 

LongDsc = tree.xpath('//li[@class="productLongDescription"]/text()') 

print 'ShortDsc:', ShortDsc 
print 'LongDsc:', LongDsc 

Ich glaube, ich brauche

ist

Jede Hilfe sehr geschätzt

in diesem Fall versuchen

Antwort

1

Sie sollten Selen eine Anfrage direkt an Admin-ajax.php senden Wenn Sie Javascript-Inhalt kratzen möchten:

from selenium import webdriver 
import time 

driver = webdriver.PhantomJS() 
driver.get("http://turnpikeshoes.com/shop/TCF00003") 
time.sleep(5) 

LongDsc = driver.find_element_by_class_name("productLongDescription").text 

print 'LongDsc:', LongDsc 

Btw, sollten Sie auch Installieren Sie PhantomJS als kopflosen Browser.

0

Der Shop führt beim Laden mit der URL als Parameter in den Formulardaten eine POST-Anfrage an sich selbst durch. Hier ist ein kleines Skript mit requests.Session, die zuerst den Shop öffnet und sendet dann die POST-Anfrage, um die Produktinformationen zu erhalten. Es simuliert die Schritte, die ein Browser durchführen würde - das Speichern der Cookies von der ersten Anfrage - was wahrscheinlich notwendig ist, um die gewünschte Antwort von dem POST-Anruf zu erhalten.

import requests 

product_url = 'http://turnpikeshoes.com/shop/TCF00003' 
product_ajax = 'http://turnpikeshoes.com/wp-admin/admin-ajax.php' 
data = {'mrQueries[]':'section', 'action':'mrshop_ajax_call', 'url': product_url} 

s = requests.Session() 
s.get(product_url) 
r = s.post(product_ajax, data=data) 

print(r.text) 

Sie könnten auch versuchen, die Cookies einmal am Anfang zu bekommen und sie für alle weiteren POST-Anfragen zu verwenden. Die Shops ermöglichen das Scripting, um die Produktspiele in Ihren Händen zu sehen, indem die tatsächliche Antwortgröße reduziert wird.

0

Dieser arbeitete für mich.

from selenium import webdriver 

ff = webdriver.PhantomJS() 
ff.get(url) 
ff.find_element_by_xpath("//span[@itemprop='price']").get_attribute("content") 

Vielen Dank!