2016-07-31 11 views
-1

Ich weiß, dass ein Schlüssel Fehler ausgelöst wird, wenn ein dict() Objekt angefordert wird (im Format a = adict [key]) und der Schlüssel nicht in der Wörterbuch. Aber mein Schlüssel ist da. Es ist mir zu sagen, dass die ‚einbetten‘ Schlüssel das Problem meines CodeKann nicht verstehen, warum ich einen Keyerror in meiner Django Python App bekomme

heren

def scrape_and_store_vlad(): 
     url_two = 'http://www.example.net' 
     html = requests.get(url_two, headers=headers) 
     soup = BeautifulSoup(html.text, 'html5lib') 
     titles = soup.find_all('div', {'class': 'entry-pos-1'}) 

     def make_soup(url): 
      the_comments_page = requests.get(url, headers=headers) 
      soupdata = BeautifulSoup(the_comments_page.text, 'html5lib') 
      comment = soupdata.find('div', {'class': 'article-body'}) 
      para = comment.find_all('p') 
      kids = [child.text for child in para] 
      blu = str(kids).strip('[]') 
      return blu 
     name = 'vlad' 
     entries = [{'href': url_two + div.a.get('href'), 
        'src': url_two + div.a.img.get('data-original'), 
        'text': div.find('p', 'entry-title').text, 
        'comments': make_soup(url_two + div.a.get('href')).replace("\\", ""), 
        'name': name, 
        'url': url_two + div.a.get('href') 
        } for div in titles][:6] 

     # scraping from vlad part two 
     titles_two = soup.find_all('div', {'class': 'entry-pos-2'}) 

     entries_two = [{'href': url_two + div.a.get('href'), 
         'src': url_two + div.a.img.get('data-original'), 
         'text': div.find('p', 'entry-title').text, 
         'comments': make_soup(url_two + div.a.get('href')).replace("\\", ""), 
         'name': name, 
         'url': url_two + div.a.get('href'), 
         'embed': url_two + div.a.get('href'), 
         } for div in titles_two][:6] 

     merged_vlad_entries = entries + entries_two 

     return merged_vlad_entries 


    def panties(): 
     from lxml import html 
     pan_url = 'http://www.example.net' 
     shtml = requests.get(pan_url, headers=headers) 
     soup = BeautifulSoup(shtml.text, 'html5lib') 
     video_row = soup.find_all('div', {'class': 'video'}) 
     name = 'pan videos' 

     def youtube_link(url): 
      youtube_page = requests.get(url, headers=headers) 
      soupdata = BeautifulSoup(youtube_page.text, 'html5lib') 
      video_row = soupdata.find_all('script', {'type': 'text/javascript'}) 
      entries = [{'text': str(div), 
         } for div in video_row] 

      tubby = str(entries[4]) 
      urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', tubby) 
      return urls 

     def embed(url): 
      new_embed = url.replace("watch?v=", "embed/") 
      return new_embed 

     entries = [{'href': div.a.get('href'), 
        'src': youtube_link(div.a.get('href'))[1], 
        'text': div.h4.text, 
        'comments': div.h4.text, 
        'name': name, 
        'url': div.a.get('href'), 
        'embed': embed(youtube_link(div.a.get('href'))[0]), 
        } for div in video_row][:3] 
     return entries 


    def save_the_scrapes(): 

     from_world_star = scrape_and_store_world() 
     from_vlad_tv = scrape_and_store_vlad() 
     from_pan = panties() 
     mergence = from_world_star + from_vlad_tv + from_pan 

     random.shuffle(mergence) 

     for entry in mergence: 
      post = Post() 
      post.title = entry['text'] 
      title = post.title 
      if not Post.objects.filter(title=title): 
       post.title = entry['text'] 
       post.name = entry['name'] 
       post.url = entry['url'] 
       post.body = entry['comments'] 
       post.image_url = entry['src'] 
       post.video_path = entry['embed'] 
       post.status = 'draft' 
       post.save() 
     return mergence 

, bevor ich die Einbettungs Schlüssel alles funktionierte gut aufgenommen. Wenn jemand meinen Fehler entdecken kann, lass mich bitte wissen, wo ich falsch gelaufen bin. Vielen Dank.

+1

Bitte geben Sie nur den * relevanten * Code und den vollständigen Traceback an. –

Antwort

1

Der Schlüssel ist eindeutig nicht da, sonst würdest du keinen KeyError bekommen.

Sie legen den Schlüssel nicht in Ihrer scrape_and_store_vlad Methode fest.

def scrape_and_store_vlad(): 
    ... 
    entries = [{'href': url_two + div.a.get('href'), 
       'src': url_two + div.a.img.get('data-original'), 
       'text': div.find('p', 'entry-title').text, 
       'comments': make_soup(url_two + div.a.get('href')).replace("\\", ""), 
       'name': name, 
       'url': url_two + div.a.get('href') 
       } for div in titles][:6] 
+0

Sie hatten Recht. Entschuldige Coding lange Stunden und habe es versäumt, das zu sehen – losee