如何正确编写从网页中提取所有链接的程序?

时间:2019-02-16 14:10:31

标签: python web-crawler extract

这是Udacity课程WEB SEARCH ENGINE的一部分。本测验的目的是编写一个程序来提取网页中的所有链接。在输出程序上必须仅返回LINKS。和“无”两次。我知道程序的第二部分在“ WHILE”之后和在“ ELSE”之后出现错误。但是我不知道我该在那写什么。

def get_next_target(page):
  start_link = page.find('<a href=')
  if start_link == -1:
    return None,0

  else:
    start_quote = page.find('"', start_link)
    endquo = page.find('"',start_quote + 1)
    url = page[(start_quote + 1) : endquo]
    return url,endquo 

page = 'i know what you  doing summer <a href="Udasity".i know what you  doing summer <a href="Georgia" i know what you  doing summer '


def ALLlink(page):
  url = 1
  while url != None:
    url,endquo = get_next_target(page)
    if url:
      print url
      page = page[endquo:] 
    else:

print ALLlink(page) 

1 个答案:

答案 0 :(得分:0)

首先,您可以在else函数中删除ALLlink()语句,因为它没有执行任何操作。

此外,与None相比,您应该使用is not而不是!=

while url != None:  # bad
while url is not None  # good

也就是说,我认为您的错误出在您的最后一行:

print ALLlink(page)

您基本上有两个打印语句。第一个位于函数内部,第二个位于脚本的最后一行。确实,您不需要那里的最后一条打印语句,因为您已经在ALLlink()函数中进行打印。因此,如果将行更改为ALLlink(page),我认为它会起作用。

如果确实要在此处打印,则可以修改函数以将URL存储在数组中,然后打印该数组。像这样:

def ALLlink(page):
    urls = []
    url = 1
    while url is not None:
        url, endquo = get_next_target(page)
        if url:
            urls.append(url)
            page = page[endquo:]
    return urls

print ALLlink(page)