2016-07-16 5 views
0

私は、beatifulsoup、Python、リクエスト、およびdjangoを使用するアプリケーションに取り組んでいます。私は美しいスープを使う方法を掴んでいます。しかし、掘り下げはさまざまな要素のように思えるが、時々混乱する。私は、最高のものではないが、投稿からのリンクを拾い読みし、それらのリンクを使って投稿の詳細ページに行く関数を作成しました。そのページから、facebookのURLとそれに関連付けられたイメージを含むスクリプトデータをスクラップします。これは私のscraper.pybeautifulsoupの結果から返された辞書から値を抽出するにはどうすればよいですか?

def panties(): 
    pan_url = 'http://www.panvideos.com' 
    html = requests.get(pan_url, headers=headers) 
    soup = BeautifulSoup(html.text, 'html5lib') 
    video_row = soup.find_all('div', {'class': 'video'}) 

    def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 
     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find('div', {'class': 'video-player'}) 
     entries = [{'text': str(div), 
        } for div in video_row][3] 
     return entries 

    entries = [{'text': div.h4.text, 
       'href': div.a.get('href'), 
       'tube': youtube_link(div.a.get('href')), 
       } for div in video_row][:3] 

    return entries 
私のviews.pyから

pan = panties() 
    context = { 
     'pan': pan, 
    } 
    return render(request, 'index.html', context) 

と私のテンプレートでは、それは

を返す何

{% for p in pan %} 
    Title: {{p.text}}<br> 
    Href: {{p.href}}<br> 
    Tube: {{p.tube}}<hr> 
{% endfor %} 

と相続人からのコード

です

Title: Juanka - Esperando por ti (Official Video) 
Href: http://www.videos.com/video/2962/juanka-esperando-por-ti-official-video-/ 
Tube: {'text': '<script type="text/javascript">jwplayer("video-setup").setup({file:"http://www.youtube.com/watch?v=QL4JFUHd71o",image:"http://i1.ytimg.com/vi/QL4JFUHd71o/maxresdefault.jpg",primary:"html5",stretching:"fill","controlbar":"bottom",width:"100%",aspectratio:"16:9",autostart:"true",logo:{file:"http://www.panvideos.com/uploads/gopcds-png5787dbcd53a72.png",position:"bottom-right",link:"http://www.panvideos.com/"},sharing:{link:"http://www.panvideos.com/video/2962/juanka-esperando-por-ti-official-video-/","sites":["facebook","twitter","linkedin","pinterest","tumblr","googleplus","reddit"]}});</script>'} 

私の事は、私はそれぞれのビデオおよび画像です

http://www.youtube.com/watch?v=QL4JFUHd71o 

http://i1.ytimg.com/vi/QL4JFUHd71o/maxresdefault.jpg 

をしたいです。どうすればこれを達成できますか?私のコードは石で設定されていませんし、それを動作させるために変更しても構いません。アドバイスをいただき、ありがとうございます。

答えて

0

わかりましたら、p.tube BeautifulSoupオブジェクトから2つの要素を探したいと思っています。わかりやすくするために、soupとします。

まず、<script>を取り除き、soup.text機能を使用します。

その後、私はあなたを変換するために、その後、.setup(はその前にあるすべてのものを取り除くために、そして-2が終了

import re 
s = re(".setup(", soup) 
soup = soup[s.end:-2] 

);を取り除くために見つけるために、パッケージhttps://docs.python.org/2/library/re.html再正規表現を使用します辞書に文字列は、私はあなたがast.literal_evalを使用しての助言: Convert a String representation of a Dictionary to a dictionary?

残念ながら、あなたの文字列がうまく辞書に簡単に変換するフォーマットされていない(それは簡単になります)。

したがって、私はあなたが検索している要素は、最初の2つですので、あなたは簡単に

+0

こんにちはおかげでそれらを見つける必要があり、昏睡,

soup = soup[1:-1] l = soup.split(',') 

、うまくいけばと{}を取り除き、および分割になるだろう応答のために。しかし、どうすればこのコードを自分のコードに適合させることができますか?あなたのソリューションは、あなたの定義によるp.tubeまたはスープがテンプレート内にあるので、自分のコードで説明したように機能しません。 (スープ) スープ=スープ[s.end:-2] – losee

+0

あなたは持っているものと私のコードを取り入れてもらえますか?私はs = re( "。セットアップ( "、スープ)私は"再呼び出し不可能 "エラーが発生しました – losee

+0

上記の私の前の応答を参照してください – losee

関連する問題