2016-04-04 1 views
0

Ich versuche, den Inhalt der Financial Times Search Seite zu kratzen.Python-Anfragen: Kann nicht den gesamten HTML-Code von einer Seite

Mit Requests kann ich die Titel und Hyperlinks der Artikel leicht verschrotten.

Ich möchte den Hyperlink der nächsten Seite abrufen, aber ich kann ihn nicht in der Antwort Requests finden, anders als die Titel oder Hyperlinks der Artikel.

from bs4 import BeautifulSoup 
import requests 

url = 'http://search.ft.com/search?q=SABMiller+PLC&t=all&rpp=100&fa=people%2Corganisations%2Cregions%2Csections%2Ctopics%2Ccategory%2Cbrand&s=-lastPublishDateTime&f=lastPublishDateTime[2000-01-01T00%3A00%3A00%2C2016-01-01T23%3A59%3A59]&curations=ARTICLES%2CBLOGS%2CVIDEOS%2CPODCASTS&highlight=true&p=1et' 

response = requests.get(url, auth=(my login informations)) 

soup = BeautifulSoup(response.text, "lxml") 

def get_titles_and_links(): 
    titles = soup.find_all('a') 
    for ref in titles: 
     if ref.get('title') and ref.get('onclick'): 
      print ref.get('href') 
      print ref.get('title') 

Die Funktion get_titles_and_links() gibt mir die Titel und Links aller Artikel.

jedoch mit einer ähnlichen Funktion für die nächste Seite, ich habe keine Ergebnisse:

def get_next_page(): 
    next_page = soup.find_all("li", class_="page next") 
    return next_page 

Oder:

def get_next_page(): 
    next_page = soup.find_all('li') 
    for ref in next_page: 
     if ref.get('page next'): 
      print ref.get('page next') 

Antwort

1

Wenn Sie die erforderlichen Links auf der Seite Quelle zu sehen, aber sind nicht in der Lage, sie über requests oder urllib zu bekommen. Es kann zwei Dinge bedeuten.

  1. Es stimmt etwas mit Ihrer Logik nicht. Nehmen wir an, dass es nicht so ist.
  2. Dann wird die Sache bleibt, ist: Ajax, die Teile der Seite, die Sie suchen geladen werden durch Javascript nach die document.onload Methode gebrannt. Sie können also nichts bekommen, was nicht an erster Stelle steht.

Meine Lösungen (eher Vorschläge) sind

  1. Reverse Engineering die Netzwerkanforderungen. Schwierig, aber universell einsetzbar. Ich mache das persönlich. Vielleicht möchten Sie re Modul verwenden.
  2. Finden Sie etwas, Rendern Javascript. Das ist nur zu sagen, simulieren Web-Browsing. Vielleicht möchten Sie die Webtreiber Komponente von selenium, Qt usw. überprüfen. Dies ist einfacher, aber ein bisschen Speicher hungrig und verbraucht viel mehr Netzwerkressourcen im Vergleich zu 1.
+0

Danke für Ihre Antwort, es hat mir geholfen, mein Problem zu verstehen. Ich benutzte das Modul [https://github.com/niklasb/dryscrape], um die Webseite zu scrappen. – Baptiste

+0

Wenn es geklappt hat, ist das großartig. Aber das Reverse-Engineering der Netzwerkanforderungen macht die Konzepte spektakulär. Aber es braucht Zeit. –

+0

Nun, um ehrlich zu sein, mit den schnellen Internetsuchen, die ich nach Ihrer Antwort gemacht habe, habe ich keine klaren (für mich) Erklärungen über das Reverse Engineering der Netzwerkanforderungen gefunden. Und ich muss sagen, liebe eine schnelle und einfache Lösung. – Baptiste