Чтобы попрактиковаться еще в Python, я решил попробовать себя на pythonchallenge.com
Вкратце, этот вызов в качестве первого шага требует загрузки html-страницы из URL с номером в конце. Страница содержит одну строку текста, в которой есть номер. Этот номер используется для замены существующего в URL-адресе, поэтому вы переходите на следующую страницу последовательности. По-видимому, это продолжается в течение некоторого времени ... (это еще не все, но работа над этой частью - первый шаг).
Мой код для этого приведен ниже (пока что он ограничен тем, что должно быть на первых четырех страницах последовательности). По какой-то причине он работает в первый раз - он получает вторую страницу последовательности, читает число, переходит к третьей и читает там число. Но затем он застревает на третьем. Я не понимаю почему, хотя думаю, что это может быть связано с моей попыткой превратить число в строку перед тем, как поместить его в конец URL. Чтобы ответить на очевидный вопрос, да, я знаю, что pythonchallenge работает нормально - вы можете делать URL-номера вручную, если у вас есть терпение, чтобы подтвердить, если вам нравится: p
import httplib2
import re
counter = 0
new = '12345' #the number for the initial page in the sequence, as a string
while True:
counter = counter + 1
if counter == 5:
break
original = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
nextpage = original+new #each page in the sequence is visited by adding
#the number after 'nothing='
print(nextpage)
h = httplib2.Http('.cache')
response, content = h.request(nextpage, "GET") #get the content of the page,
#which includes the number for the
#*next* page in the sequence
p = re.compile(r'\d{4,5}$') #regex to find a 4 to 5 digit number at the end of
#the content
new = str((p.findall(content))) #make the regex result a string - is this
#where the problem lies?
print('cached?', response.fromcache) #I was worried my requests were somehow
#being cached not actually sent afresh to
#pythonchallenge. But it seems they aren't.
print(content)
print(new)
И результат вышеизложенного выглядит следующим образом, ниже. Кажется, что он отлично работает для первого прогона (добавление 92512 к URL-адресу и успешное получение следующей страницы и поиск следующего значения), но после этого он просто застревает и, похоже, не загружает следующую страницу в последовательности , Тестирование путем изменения URL-адреса вручную в браузере подтверждает, что номер правильный, а pythonchallenge работает нормально.
Мне кажется, что что-то идет не так, превращая мой поиск по регулярному выражению в строку, добавляемую в конец URL - но почему это должно работать в первый раз, а не во второй, я не знаю. Я также был обеспокоен тем, что, возможно, мои запросы доходили только до кеша (я новичок в httplib2 и не уверен в том, как он кеширует), но, похоже, что это не так. Я также добавил аргумент no-cache в запрос, просто чтобы быть уверенным (не показано в этом коде), но это не помогло.
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345
('кэшировано?', False)
, а следующий ничего не 92512
[ '92512']
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['92512']
('кэшировано?', False)
и следующий ничего не 72758
[ '72758']
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']
('кэшировано?', False)
и следующее ничто - 72758
[ '72758']
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=['72758']
('кэшировано?', False)
и следующее ничто - 72758
[ '72758']
Буду признателен всем, кто может указать, где я ошибаюсь, а также за любые соответствующие советы
Заранее спасибо ...