2017-04-27 4 views
0

Ich versuche, ein bestimmtes Element auf einer Website mit lxml in Python zu scrappen. Im Folgenden finden Sie meinen Code, aber es gibt keine Ausgabe.Python lxml xpath gibt keine Ausgabe zurück

from lxml import html 

    webpage = 'http://www.funda.nl/koop/heel-nederland/' 
    page = requests.get(webpage) 
    tree = html.fromstring(page.content) 

    content = '//*[@id="content"]/form/div[2]/div[5]/div/a[8]/text()' 
    content = str(tree.xpath(content)) 
    print content 

Antwort

1

Es sieht aus, dass die Website, die Sie versuchen zu verschrotten, nicht verschrottet werden soll. Sie verwenden verschiedene Techniken, um zu erkennen, ob eine Anfrage von einem legitimen Benutzer oder von Bot- und Block-Zugriffen kommt, wenn sie denken, dass sie von einem Bot stammt. Das ist der Grund, warum dein XPath nichts findet und deshalb solltest du das, was du tust, überdenken.

Wenn Sie sich entscheiden, dass Sie fortfahren möchten, dann scheint die einfachste Art, diese spezielle Website zu täuschen, das Hinzufügen von Cookies zu Ihren Anfragen.

Zuerst Cookie-String Sie echte Browser erhalten:

  1. Neue Registerkarte öffnen
  2. öffnen Entwickler-Tools
  3. Gehen Sie zu Registerkarte "Netzwerk" in Entwickler-Tools
  4. Wenn die Netzwerk-Registerkarte leer ist, Seite aktualisieren
  5. Suchen Sie nach heel-nederland/ und klicken Sie darauf
  6. In Request Header finden Sie Cookie-Zeichenfolge - es ist ziemlich lang und enthält viele scheinbar zufällige Zeichen. Kopieren es

Ändern Sie dann Ihr Programm diese Cookies verwenden:

import requests 
from lxml import html 

webpage = 'http://www.funda.nl/koop/heel-nederland/' 
headers = { 
     'Cookie': '<string copied from browser>' 
     } 
page = requests.get(webpage, headers=headers) 
tree = html.fromstring(page.content) 

selector = '//*[@id="content"]/form/div[2]/div[5]/div/a[8]/text()' 
content = str(tree.xpath(selector)) 
print content