2016-05-10 12 views
0

Ich benutze beautifulsoup4 in meiner Django App, um Daten zu scrappen. Ich war in der Lage, die Daten von dieser HTML-StrukturMit beautifulsoup4 in meiner Django App wie bekomme ich die "a" href und image src?

<div class="thumbnail thumb"> 
     <h6 id="date">May 9, 2016</h6> 


     <img src="http://assets.system.jpg" class="img-responsive post"> 


     <div style="border-bottom: thin solid lightslategray; padding-bottom: 15px;"></div> 

     <div class="caption" id="cap"> 
      <a href="/blog/homeland-security-attack/"> 
       <h5 class="post-title" id="title">Homeland Security </h5> 
      </a> 

      <p> 
       <a href="/blog/88/delete/" class="btn" role="button">delete</a> 
       <a href="/blog/homeland-" class="btn" role="button">edit</a> 
      </p> 

     </div> 
    </div> 

mit dieser meiner Meinung nach

url = 'http://www.hispanicheights.com/' 
google = requests.get(url) 
bs = BeautifulSoup(google.content, 'html.parser') 
divs = bs.findAll('div', 'thumbnail') 
    entries = [{'text': div.text, 
      'href': div.find('a').get('href'), 
      'src': div.find('img').get('src') 
      } for div in divs][:6] 

zu bekommen, aber wenn ich versuchte, diese HTML-Struktur

<div class="entry entry-pos-1" id="entry-217985"> 
     <a href="/article/murder" data-page="1"> 
      <p class="entry-comments">6</p> 
      <img data-original="/images17985.jpg" alt="Chicago Rapper &amp; OTF Aff Murder" width="320" height="179" class="image-load" src="/images/size_mb/video-217985.jpg" style="display: block;"> 
     </a> 
     <p class="entry-title"> 
      <a href="/article/-murder" data-page="1">Chicago Rapper &amp; OT Murder</a> 
     </p> 
     <p class="entry-meta">97 views</p> 
     <p class="entry-date"> 
     <span class="entry-recent">11 Mins Ago</span> 
     </p> 
    </div> 

mit der gleichen Sache zu kratzen

ad_url = 'http://www.ad.com/' 
ad_get = requests.get(ad_url, headers=headers) 
ad_soup = BeautifulSoup(ad_get.content, 'html.parser') 
ad_div = vlad_soup.findAll('div', 'entry') 
ad_entry = [{'text': div.text, 
       'href': div.find('a').get('href'), 
       'src': div.find('img').get('src') 
       } for div in ad_div] 

Es g und der Fehler Nonetype-Objekt hat Attribut hat Attribut erhalten

Was ist die richtige Syntax, um die href und src greifen?

+0

Sie verwenden 'vlad_div', aber definieren Sie es nicht in dem Code, den Sie hier eingefügt haben. –

+1

Möglicherweise enthalten einige 'div' keine' a' oder 'img'? – har07

Antwort

0

Wenn Sie div.find('a') für eine div anrufen, die keinen Anker enthält, wird None zurückgegeben. Dein Code muss damit umgehen. Zum Beispiel könnten Sie Folgendes tun:

entries = [] 
for div in vlad_div: 
    a = div.find('a') 
    img = div.find('img') 
    if a is not None and img is not None: 
     entry = { 
      'text': div.text 
      'href': a.get('href') 
      'src': img.get('src') 
     } 
     entries.append(entry) 
+0

Dies funktioniert nicht richtig. Ich muss in der Lage sein, es ähnlich wie meinen Code zu machen, also passen die Bilder href und Text zusammen. So wie du es hast, wird es nicht funktionieren und nicht nur, dass dein Weg funktioniert, ohne dass ich es in meine Vorlage einfüge. Es erscheint nur – nothingness

+0

Der Code sieht ok für mich aus, aber ich wäre nicht zu überrascht, wenn Sie es leicht ändern müssen. Mein Hauptpunkt ist, dass Sie das Ergebnis von 'div.find ('a')' überprüfen müssen. Du kannst 'div.find ('a'). Get ('href')' nicht einfach machen, weil es einen Fehler verursachen könnte. – Alasdair

+0

Warum funktioniert mein Code nicht? Kannst du es genau bestimmen, damit ich nicht umsonst an den Wänden lade? das ist ein bisschen frustrierend, weil es scheinbar willkürlich funktioniert – nothingness

Verwandte Themen