2016-07-21 9 views
1

Ich versuche, die Youtube Wasserzeichen ein Element href kratzen, aber ich kann nicht scheinen, es zu greifen .Ich bekomme Fehler wie 'ResultSet' Objekt hat kein Attribut 'Get' und 'NoneType' Objekt hat kein Attribut 'Get'

wenn ich versuche,

def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find_all('a', {'class': 'ytp-watermark'}) 
     entries = video_row.get('href') 

     return entries 

I

'ResultSet' object has no attribute 'get' 

bekommen Wenn ich versuche,

 def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find('a', {'class': 'ytp-watermark'}) 
     entries = video_row.get('href') 

     return entries 

ich

'NoneType' object has no attribute 'get' 

Wenn ich

 def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find('a', {'target': '_blank'}) 
     entries = video_row.get('href')[24] 

     return entries 

versuchen bekomme ich ein einzelnes Zeichen

's' 

wenn ich versuche,

 def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find('a', {'target': '_blank'})[24] 
     entries = video_row.get('href') 

     return entries 

i

24 

, wenn ich versuche,

 def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find('a', {'target': '_blank'})[24:] 
     entries = video_row.get('href') 

     return entries 

ich

unhashable type: 'slice' 

wenn ich versuche,

def panties(): 
    from lxml import html 
    pan_url = 'http://www.panvideos.com' 
    shtml = requests.get(pan_url, headers=headers) 
    soup = BeautifulSoup(shtml.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('a', {'target': '_blank'}) 
     entries = [{'text': div.get('href'), 
        } for div in video_row][24] 


    return entries 

I

'NavigableString' object has no attribute 'get' 

, wenn i

def youtube_link(url): 
     youtube_page = requests.get(url, headers=headers) 

     soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
     video_row = soupdata.find_all('a', {'class': 'ytp-title-link'}) 
     entries = [{'text': div.get('href'), 
        } for div in video_row] 

     return entries 
versuchen

ich

[] 

Wenn ich das Chrom inspizieren und schweben über dem Wasser Zeichen verwenden bekomme ich

 <a class="ytp-watermark yt-uix-sessionlink" target="_blank" aria-label="Watch on www.youtube.com" data-sessionlink="feature=player-watermark" href="https://www.youtube.com/watch?v=Xjww1pgKgnU" data-layer="7"> 
     <svg xmlns:xlink="http://www.w3.org/1999/xlink" height="100%" version="1.1" viewBox="0 0 77 34" width="100%"> 
      ........ 
     </svg> 
    </a> 

aber wenn ich die Suche Fähigkeit prüfen und Art verwenden _blank ich

<a class="ytp-title-link yt-uix-sessionlink" target="_blank" data-sessionlink="feature=player-title" href="https://www.youtube.com/watch?v=Xjww1pgKgnU"> 
     <span class="ytp-title-playlist-icon" style="display: none;"> 
     ..... 
     </span> 
    <span>Packer Luther King Feat Mgp the Saw -BIEN MALA (Video Oficial)</span></a> 

keiner von diesen gibt Ergebnisse zurück. Ist meine Syntax falsch? Jede Hilfe wird

das ist meine ganze Funktion

def panties(): 
     from lxml import html 
     pan_url = 'http://www.panvideos.com' 
     shtml = requests.get(pan_url, headers=headers) 
     soup = BeautifulSoup(shtml.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('a', {'class': 'ytp-title-link yt-uix-sessionlink'}) 
      entries = [{'text': div.get('href'), 
         } for div in video_row] 


      return entries 

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

     return entries 

Es gefüttert wird eine URL zu erkennen ist, verwendet diese URL als eine Möglichkeit, um die Detailseite zu gelangen und von dieser Seite, dass Informationen erhalten und es zurück. Aus irgendeinem Grund wird ein Link als None zurückgegeben. Wenn ich versuche alles zu finden oder finde es wird kein einziges Element zurückgeben. Aber wenn ich nach h1 suche, wird es funktionieren.

EDIT Ich habe versucht, verschiedene Parser

html.parser, lxml und html5lib

EDIT:

Ich glaube, die Daten nicht gekratzt werden, weil sie aus dem Media-Player kommt. wenn ich

tat
video_row = soupdata.find_all('body') 

die Daten, die ich suchte nicht erschienen. Also ich bin es nicht, und ich glaube nicht, dass es ein Käfer ist oder irgendetwas, das nicht mit den üblichen Mitteln erhältlich ist. Link-Tags Meta-Tags und einige andere Tags können nicht erfasst werden.

+0

Wenn 'soupdata.find_all()' 'kehrt []', das bedeutet, dass das Element nicht existiert in dem Dokument. Möglicherweise wird das Wasserzeichen dynamisch mithilfe von JavaScript hinzugefügt. In diesem Fall wird es in Chrome angezeigt, nicht jedoch in dem mit 'requests.get()' heruntergeladenen Dokument. – Alasdair

Antwort

0

Wenn ich vollen Wert für die Klasse habe ich die href bekam ...

video_row = soupdata.find('a', {'class': 'ytp-watermark yt-uix-sessionlink'}) 

und wenn Sie findAll verwenden wollen, müssen Sie über Einträge iterieren. zum Beispiel selbst zusätzliche Liste entries_final erstellen und dies tun:

video_rows = soupdata.findAll('a', {'class': 'ytp-watermark yt-uix-sessionlink'}) 
entries_final = [] 
for row in video_rows: 
    entries_final.append(row.get('href')) 

und dann return entries_final

+0

Mein Fehler, wenn ich versuche, dass 'NoneType' Objekt nicht iterierbar ist Wenn ich find_all es gibt eckige Klammern [] nur – losee

+0

mein Fehler 'NoneType' Objekt ist nicht iterierbar. Ich benutze dies in einer Django-App, wenn das einen Unterschied macht. und ich will auch den youtube link nicht den pavideo link – losee

+0

Ich fange an zu denken, dass die Seite mich irgendwie blockiert – losee