Russian subtitles

← 02-52 Выводим все ссылки

Get Embed Code
9 Languages

Showing Revision 1 created 09/04/2013 by handfulofvoid.

  1. Итак, мы модифицировали нашу процедуру get_next_target(),
  2. и теперь она возвращает None в качестве первого результата, если во входной строке нет ссылки.
  3. В противном случае она вернет URL и позицию закрывающей кавычки.
  4. И теперь нам осталось сообразить, как повторять ее вызов.
  5. Посмотрим на то, что мы сделали ранее.
  6. мы превратили эти 4 строчки кода в нашу процедуру,
  7. и теперь мы можем вместо того, чтобы писать весь этот код,
  8. просто вызвать get_next_target()
  9. и поместить ее результаты в переменные.
  10. Теперь у нас есть значение URL, которое мы выводим на экран,
  11. мы продолжим выводить его, как и раньше.
  12. И нам все еще нужно изменять значение page,
  13. но теперь мы не будем использовать для этого end_quote.
  14. Вместо него мы используем это возвращаемое значение,
  15. которое мы присвоили переменной endpos.
  16. И затем все повторяется вновь.
  17. Вместо всего этого кода мы производим еще один вызов get_next_target(),
  18. и вновь используем endpos вместо end_quote.
  19. И нам нужно вызывать процедуру пока мы не доберемся до конца страницы,
  20. но как мы узнаем, что добрались до конца?
  21. Ну, мы понимаем, что добрались до конца, когда
  22. вместо URL возвращается None.
  23. И когда вызов get_next_target() возвращает None вместо URL,
  24. мы понимаем, что закончили.
  25. Мы уже нашли способ повторять один и тот же код – while-цикл.
  26. Мы узнали, как выполнять проверку условия,
  27. чтобы проверять URL.
  28. И теперь мы знаем все необходимое для того, чтобы вывести все ссылки на веб-странице.
  29. Я покажу вам, как начать писать эту процедуру,
  30. а вы закончите ее.
  31. Мы определим процедуру,
  32. которая выводит все ссылки на странице,
  33. принимая на вход строку page; поэтому мы будем использовать в ней while-цикл,
  34. и я оставлю пустым условие while-цикла.
  35. Его вам надо будет вписать самостоятельно.
  36. В теле while-цикла мы будем вызывать get_next_target(),
  37. присваивая результаты вызова переменным url и endpos.
  38. То же самое мы делали в нашем примере.
  39. Теперь нам нужно проверить правильность полученного URL,
  40. раньше мы всегда
  41. полагали, что получаем корректный URL,
  42. выводили его на экран и продолжали выполнять код, но теперь нам нужно проверять,
  43. равен ли возвращаемый URL значению None.
  44. Этим мы и займемся.
  45. У нас есть условие if url, и если оно истинно, мы нашли корректный URL.
  46. То есть мы не получили значение None в результате вызова get_next_target(),
  47. и значит нам нужно вывести его на экран, как и ранее.
  48. Мы выводим URL, и урезаем содержимое page,
  49. убирая все символы до endpos.
  50. Если мы не получаем корректный URL,
  51. это значит, что get_next_target() не нашла ссылку.
  52. То есть на странице больше не осталось ссылок,
  53. и нам нужно сделать кое-что другое, но вместо этого «кое-чего»
  54. я оставлю прочерк.
  55. Итак, это все что нам нужно для процедуры print_all_links() [вывести все ссылки].
  56. Чтобы выполнить это задание, вам нужно заполнить два пропуска.
  57. Посмотрим, сумеете ли вы сообразить, каким должно быть условие while-цикла
  58. и содержимое else-блока.
  59. И если ваша догадка окажется верной, вы сможете вывести все ссылки на веб-странице.