2016-05-05 4 views
0

Newbie für Python, würde die Verwendung lxml + XPath wie Video-Link von Webseite zu bekommen, was ich jetzt habe ist:Verwenden von Python Lxml + Xpath, um Videos von einer Seite zu erhalten, eine Liste, aber kann das Ergebnis nicht ausdrucken?

import urllib2 
from lxml import etree 

url=u"http://hkdramas.se/fashion-war-%E6%BD%AE%E6%B5%81%E6%95%99%E4%B8%BB-episode-20/" 
xpath=u"//script[contains(.,'label:\"360p\"')]" 

html=urllib2.urlopen(url).read() 
selector=etree.HTML(html) 
get=selector.xpath(xpath) 

print get 

Ich habe checken type() von get, die mir zeigt, es ist ein list, aber wenn I print get, zeigt es mir unerwartet [<Element script at 0x2a34b88>], was ist das? und wie kann ich die tatsächliche URL des Videos statt Element script extrahieren?


schließlich bekam ich, warum ich dieses Problem hatte, dank @unutbu

xpath=u"//script[contains(.,'label:\"360p\"')]" 

sollte

xpath=u"//script[contains(.,'label:\"360p\"')]//text()" 

die text() sicher Rückkehr nur Text machen hinzugefügt werden, aber keine Elemente, Beachten Sie unter dem Auswahlelement die //, die kompatibel ist, wenn viele Unterelemente der Auswahl vorhanden sind.

Antwort

0

selector.xpath(xpath) gibt eine Liste der Tags (genauer gesagt Element s) zurück. Wenn Sie eine Liste von Objekten drucken, zeigt Python die repr dieser Element s. <Element script at 0x2a34b88> ist die repr der scriptElement.

Wenn elt ist die scriptElement, dann elt.text den Text innerhalb des <script> Tag zurückkehren, aber Sie werden etwas anderes verwenden müssen (außer lxml) die URL aus dem Text zu extrahieren.

import re 
import lxml.html as LH 

url = u"http://hkdramas.se/fashion-war-%E6%BD%AE%E6%B5%81%E6%95%99%E4%B8%BB-episode-20/" 
xpath = u"""//script[contains(.,'label:"360p"')]""" 
root = LH.parse(url) 
for elt in root.xpath(xpath): 
    for url in re.findall(r'"(http[^"]+)"', elt.text): 
     print(url) 

Ausbeuten

http://hkdramas.se/wp-content/plugins/BSplugin-version-1.2/lib/grab.php?link1=NS71jbj8NVNANTN7N0Nq7Y7FjeN0NojTN47HNcN77_Nhjh7INm7ONLNijCNc7-7UN_NXNCjcNYjeNwNF7uNQNA7dNvNm7-Nr7vNW7-NtjN72N4jVNCN8NfN-NANm7l7rNP7ff5aa877861da31d8cc9dd087d6ce2417fb1308a676a771b787adbffbaa4a0bffNfNHjtj-N6NDNg7HjLND7F7fjMj.jVjKN1N-jMj7NXj7jNNyjTNwjgjmji7INANtNONsN2NvN6jMNaNTNdNlNON8j7N~NEjO7lNyN.jQNaNuN1NYNjjzNnNENUNmNm7Z707dNaNTNFN0N6N8N.NRNuN_7dNtjhjJN-jmNZNpjjNo7fNHjTNNNSNLjMNqNUjN7IN7NPNfNENKN3jT7dNs&link2= 
http://hkdramas.se/wp-content/plugins/BSplugin-version-1.2/lib/grab.php?link1=NvNeNVN4N276Nz7JNSjz7lNLNvNV7Ij3Nx7FNn7.Ni7FNU76NDNMN.NqNkNo7QNKNINiNhjPNJjmNKjPNGN.No7B7BNC7Y7B7B7lN67tjb7JNJNT7rNANrNBN7N6Nt7lN1ND0ba06b7bac4bab5fbb42dbff6c27647ea71b4f725a0c73f175eadf3b459424edN0NBNvNZj77wNL7Wj_j_71NnN0jpNfjPNqNvjDN.jEN4NRNDjijejmjXNINqNijEjENKNfNdN3jiNDNOjcNyN4NwNzN4NqNlNqNAjDNQNBN0Nk7a7Rj8NXN_NiN6NFNmNmNLNwNm7YN7j77vNfNpNljw7HjENRjmNMjVNLNEjq7BN0NON57JNyNyjpN8Nbjz7lN-NfNYNMN.7IjD7.NQ&link2= 

Beachten Sie, dass Sie das tun: Sie könnten zum Beispiel, verwenden Sie das RegexMuster r'"(http[^"]+)"' für Text zu suchen, die mit "http beginnt und wird fortgesetzt, bis ein weiteres doppeltes Anführungszeichen, wird ", gefunden nicht importieren müssen urllib2. Sie können eine URL direkt an LH.parse übergeben.


Um nur die URL zu erhalten, die '360p' durch den String folgt, könnte man

for url in re.findall(r'"(http[^"]+).*360p"', elt.text): 
    print(url) 
+0

Dank für die schnelle und ausführliche Antwort verwenden, obwohl ich nicht vertraut von 're' Modul bin, glaube ich, kann dafür später aufholen. Aber der Teil der Erklärung von Xpath ist sehr nützlich, danke. Ich werde meine Lösung auf OP setzen. – anyone

Verwandte Themen