2016-05-05 7 views
0

初心者のpythonのために、Webページからビデオリンクを取得するために使用するlxmlの+ XPathを希望、私が今持っていることは次のとおりです。python lxml + xpathを使ってページからビデオを取得してもリストを取得できますが、結果をプリントアウトできませんか?

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 

私はそれがlistだ私を示しており、gettype()をchecke、しかししました私はprint get、それは私が予期していないことを示しています[<Element script at 0x2a34b88>]、それはどういう意味ですか? Element scriptではなく、実際に動画のURLを抽出するにはどうすればよいですか?


は最終的に、私はこの問題を持っていた理由は、

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

@unutbuおかげで必ずリターンテキストだけではなく、要素を作るためにtext()を追加

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

あるべきです、選択要素の下には、選択の多くのサブ要素がある場合に互換性のある//があります。

答えて

0

selector.xpath(xpath)は、タグのリスト(またはより正確にはElements)を返します。オブジェクトのリストを印刷すると、PythonはElementreprを表示します。 <Element script at 0x2a34b88>は、scriptreprです。

eltscriptElementであれば、 elt.text<script>タグ内のテキストを返しますが、あなたはテキストからURLを抽出する(lxmlのほかに)何か他のものを使用する必要があります。あなたは、例えば、"httpで始まり、別の二重引用符、"が、発見されるまで続けてテキストを検索する正規表現パターンr'"(http[^"]+)"'を使用することができます:あなたは

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) 

利回り

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= 

注意を輸入する必要はありませんurllib2LH.parseに直接URLを渡すことができます。


文字列'360p'が続いているURLのみを取得するには、私は `re`モジュールの馴染みはないですが、私は私だと思い、迅速かつ詳細な回答のため

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

感謝を使用することができます後でこれに追いつくことができます。しかし、xpathの説明の部分は非常に便利です、ありがとう。私はOPに私の解決策を入れます。 – anyone

関連する問題