2017-07-28 3 views
0

Ich habe diese url: https://www.ft.com/content/87d644fc-73a4-11e7-aca6-c6bd07df1a3cAnmelden und eine Seite wie ft.com mit BeautifulSoup Schaben

Es entspricht einem Artikel, der die Anmeldung erfordert. Ich habe mich registriert und kann den Inhalt in meinem Browser sehen. Jedoch, wenn ich diesen Code mit der URL verwenden oben:

soup = BeautifulSoup(urllib2.urlopen(url), 'lxml') 
with open('ctp_output.txt', 'w') as f: 
    for tag in soup.find_all('p'): 
     f.write(tag.text.encode('utf-8') + '\n') 

Insbesondere leitet es mich auf der Anmeldeseite. Gibt es eine Möglichkeit, eingeloggt zu sein, um beim Scraping auf den Artikel zugreifen zu können?

Antwort

0

Hier sind die Grundlagen.

Gehen Sie auf die Login-Seite. Wenn Sie den Chrome-Browser verwenden, können Sie die Maus über den E-Mail-Eingabebereich bewegen und über das Kontextmenü (in Windows) und den Eintrag "Inspect" das form-Element anzeigen, das zum Übermitteln Ihrer E-Mail-Adresse verwendet wird. Es sieht aus wie das.

<form name="enter-email-form" action="/login/submitEmail" class="js-email-lookup-form" method="POST" data-test-id="enter-email-form" novalidate="true"> 
     <input type="hidden" name="location" value="https://www.ft.com/content/87d644fc-73a4-11e7-aca6-c6bd07df1a3c"> 
     <input type="hidden" name="continueUrl" value=""> 
     <input type="hidden" name="readerId" value=""> 
     <input type="hidden" name="loginUrl" value="/login?location=https%3A%2F%2Fwww.ft.com%2Fcontent%2F87d644fc-73a4-11e7-aca6-c6bd07df1a3c"> 
     <div class="lgn-box__title"> 
      <h1 class="lgn-heading--alpha">Sign in</h1> 
     </div> 
     <div class="o-forms-group"> 
      <label for="email" class="o-forms-label">Email address</label> 
      <input type="email" id="email" class="o-forms-text js-email" name="email" maxlength="64" autocomplete="off" autofocus="" required=""> 
      <input type="password" id="password" name="password" style="display:none"> 
      <label for="password"> 
     </label></div> 
     <div class="o-forms-group"> 
      <button class="o-buttons o-buttons--standout o-buttons--big" type="submit" name="Next">Next</button> 
     </div> 
    </form> 

Sie müssen das action Attribut aus dem form Element und alle der Name-Wert-Paare aus den input Aussagen sammeln. Sie verwenden diese in einer POST-Anfrage mit der requests library.

Sie tun dies einmal für Ihre E-Mail-Adresse und einmal für Ihr Passwort. Dann sollten Sie das GET für die URL mit Anfragen ausgeben können.

Ich muss Sie warnen, dass ich dies tatsächlich mit dieser bestimmten Seite nicht versucht habe.

+0

Okay danke, ich werde das versuchen und Sie auf dem Laufenden halten! – ben

+0

Wenn Sie das tun, können wir den Titel Ihrer Frage beispielsweise in ft.com ändern, damit andere von Ihrer Erfahrung profitieren. –

+1

Yup definitiv! Es funktionierte! – ben

Verwandte Themen