2015-06-21 4 views
0

Я пытаюсь отменить некоторые данные. Все идет отлично, только после одной линии все останавливается. Нет ошибки, просто останавливается.Одна строка, которая должна содержать информацию, останавливает все приложение Django

from bs4 import BeautifulSoup 

    r = requests.get("http://www.hltv.org/match/2296573-avant-garde-exile5-faceit-league-2015-stage-2") 
    soup = BeautifulSoup(r.text) 
    score = soup.find("div", attrs={"class": "hotmatchbox"}).find("span").text 
    match.game_1_Team_1 = score 
    match.save() 

    for i in range(17): 
     print "TESTING" # PRINTS 
     score = score.find_next("span") # AFTER THIS EVERYTHING STOPS 
     print "TESTING" # DOESN'T PRINT 
     if i == 0: 
      match.game_1_Team_2 = score 
     if i == 5: 
     ....................... 

Это действительно странно. Может кто-нибудь объяснить, почему это происходит?

+0

Обновите свой вопрос с помощью traceback (полное сообщение об ошибке). –

+0

Вы имеете в виду блокировки на 'r = requests.get (...)'? Если да, попробуйте установить таймаут, например 'request.get (url, timeout = 4)'. – poros

ответ

2

присваивается текстовое значение тега score:

score = soup.find("div", 
        attrs={"class": "hotmatchbox"}).find("span").text 

Затем вы пытаетесь запустить score.find_next("span") - это не будет работать, потому что score было изменено из результирующего объекта к тексту.

1

Назначьте элемент тега переменной, например score_tag, а затем укажите его атрибут text, когда это необходимо, как показано ниже.

import requests 
from bs4 import BeautifulSoup 

r = requests.get("http://www.hltv.org/match/2296573-avant-garde-exile5-faceit-league-2015-stage-2") 
soup = BeautifulSoup(r.text) 
score_tag = soup.find("div", attrs={"class": "hotmatchbox"}).find("span") 
match.game_1_Team_1 = score_tag.text 
match.save() 

for i in range(17): 
    print "TESTING" # PRINTS 
    score_tag = score_tag.find_next("span") # AFTER THIS EVERYTHING STOPS 
    print "TESTING" # DOESN'T PRINT 
    if i == 0: 
     match.game_1_Team_2 = score_tag.text 
    if i == 5: 
     pass # etc., etc.