2016-06-03 8 views
0

Ich versuche die Daten von der Website zu scratzen www.vestiairecollective.com Während des Scrapings habe ich Zugriff auf nur wenige seiner Hauptseiten. Zum Beispiel kann mein Skript die Daten für die URL http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3&step=180 nicht abkratzen.So loggen Sie sich beim Scrapen mit Python in eine Website ein 3.5

Ich habe viele Fragen des Stack-Überlauf verwiesen, die zeigen, wie es geht. Da ich Python 3.5 unter Windows verwende, funktioniert "mechanize" und "cookielib" nicht. Ich sah auch einige Fragen, die darauf hinwiesen, dass Bibliotheken wie "robobrowser" die Arbeit machen können. Ich habe es auch versucht und bin in der Mitte steckengeblieben.

Dann habe ich mit Sitzungen versucht und wenn ich mit request.Sessions() eingeben, sagt es Anfrage hat kein Attribut namens Sitzungen.

Bitte helfen Sie mir entweder Robobrowser oder andere Wege mit Code für diese bestimmte Website, wenn ich die oben genannte URL verwenden.

Dies ist, was ich nach dem Bezug der Antwort versucht: -

import urllib.request 
from bs4 import BeautifulSoup 
import requests 
session=requests.Session() 
loginUrl='http://www.vestiairecollective.com/' 
resLogin=session.post(loginUrl,data= {'h':'5fcdc0ac04537595a747e2830037cca0','email':'[email protected]','password':'somepasswrd','ga_client_id':'750706459.1463098234'}) 
url='http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3' 
res=session.get(url) 
//The below url i have given because I want to scrape from this url 
crl=urllib.request.urlopen("http://www.vestiairecollective.com/women-bags/handbags/#_=catalog&id_brand%5B%5D=50&material%5B%5D=3") 

soup=BeautifulSoup(crl.read(),"html.parser") 

geturl=soup.find_all("div",{"class":"expand-snippet-container"})  

for i in geturl:   //The Scraping Part 
    data1=i.find_all("p",{"class":"brand"}) 
    datac1=[da.contents[0] for da in data1] 
    brdata=("\n".join(datac1)) 
    print(brdata) 

Hier das Kratzen von der „crl“ Seite getan werden soll, aber es ist von der Hauptseite selbst zu tun.

+1

Ist das ein Tippfehler? Haben Sie 'request.Sessions' oder' request.Session' probiert? Die erste existiert nicht (die Bibliothek heißt 'requests', und das Objekt ist eine' Session() '. –

Antwort

0

Sie haben einen Fehler in request.Sessions(), der request.Session() sein sollte.

Meine answer zu einer ähnlichen Frage wird einige Beispielcode für die dauerhafte Anmeldung mit Python requests (Python 3).

Kurz zusammengefasst:

  • das requests Modul verwenden, um eine Sitzung
  • Sie erstellen können, sich mit post oder get Parameter anmelden
  • weitere Anfragen mit dem Session-Objekt werden die Cookies in geeigneter Weise
  • Griff stellen Sie sicher, dass Sie einen realistischen Benutzeragenten verwenden (sonst melden einige Seiten Sie nicht an, da sie Ihr Skript als Bot betrachten)

Code Einige relevante Linien, die Sie begeistern (nicht funktioniert wie es ist, müssen Sie diese, um Ihren Bedarf zu ändern):

import requests 
session = requests.Session() 
session.headers.update({'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1') 
# use the site's form field names for the following line 
# (and use the resLogin for checking successful login): 
resLogin = session.post(loginUrl, data = {'user' : 'username', 'password' : 'pwd'}) 
# follow-up calls to a session which was used to login 
res = session.get(url) 
+0

Vielen Dank für Ihre Antwort! Aber die erste Zeile gibt einen Fehler aus 'NameError: name' requests 'ist nicht Ich hatte noch eine weitere Information zu diesem. Diese Website hat keine separate Seite für den Login. Wenn Sie versuchen, eine Seite zu besuchen, bleibt die URL die gleiche, aber eine kleine PANEL erscheint in der Mitte mit einem Formular Es ist richtig, es erlaubt innerhalb –

+0

importieren Sie Anfragen mit 'importieren Anfragen' Für die Login-Daten müssen Sie herausfinden, was der Login-Prozess senden wird, zB durch das Lesen der HTML-Quelle oder alternativ mit Firefox Web-Entwickler tools/plugins. Finden Sie auch heraus, ob es mit 'post' oder' get' Daten gesendet wird (-> 'session.post()' vs. 'session.get()') – DomTomCat

+0

habe diesen Fehler korrigiert! Ich möchte auch frag das da mein skript zu verschiedenen URLs der website gehen und Daten von ihnen in einem sing sammeln würde Le Run, muss ich diesen Login-Prozess jedes Mal schreiben, bevor ich eine URL anfordere? Wie bereits erwähnt, ist die Website und ich möchte Daten von der großen URL sammeln, die ich in meiner Frage erwähnt habe. –