The main library used is the urllib.parse to parse the url and the urllib.request for retrieving the web page source.
I had been totally lost at the beginning. The page showed only the message ``follow the chain'' and the url said ``linkedlist'' so I thought that must be something relevant to linked list in Python.
I searched on the web and found no useful clue. I felt a little bit frustrated.
After investigating the web page of Level 04, I noticed the url ended with php instead conventional html. Actually I didn't know what was the difference between the php and html pages, but I guessed there must be some clues. When the curser moved to the picture of the web page, the url changed to something ended with ``nothing=12345'', and the link led to another page showed ``and the next nothing is 44827.'' I replaced ``12345'' with ``44827'' and got another page with new digits.
So, I assumed the digits had something to do with the linked list. I was wrong.
It took me two days to tackle the puzzle but got no useful advances. Then I decided to get some hints from the forum of The Python Challenge. The hint that led me out is the one given by thesamet:
if your hands are getting tired, maybe get someone else to do it for you...Yes. But who can do it for me? Finally I got that: do the dirty work by the script automatically for you. It is a shame not to think about such a basic principle. To do dirty or boring works by writing small script should be a institute of a hacker or of one who wants to be a hacker.
With the enlightened idea, I began to write the code and finally got the solution. :-)
The original version of the my code (in Python 3) is as follows.
from urllib.parse import urlparse from urllib.request import urlopen nothing = '12345' while nothing.isdigit(): # get modified url obj = urlparse('http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=' + nothing) # get the web page source src = urlopen(obj.geturl()).read() # extract the part of digits, and convert it from bytes to str nothing = src.split( )[-1].decode() print(src)---
Notes: There are two sequence types named bytes and str. To convert one to another, use encode and decode.