我想要做一个自己的产品——网络爬虫,它可以帮你解决许许多多问题。比如,你不仅仅可以在网络上找到链接,而且可以跟随这些链接找到所有网页,帮你节约时间。
计算机科学导论第二课中介绍了两种方法,一种是过程的方法;一种是控制的方法。
过程的方法指的是把你所写的所有代码打包整理起来,以便于你可以更容易地下次利用。
控制的方法指的是你需要找到一种方法,让它为你做决定、做重复的事情、去帮助你在网页上去找所有的链接这些事情。
在网路上寻找URL代码我可以写一下:
page=…contents of some web page…
start_link=page.find('<a href=')
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
URL=page[start_quote+1:end_quote]
print URL
上面是在一个网页中搜索到的第一个URL
为了在剩下来搜索相同的第二个我们可以再写一次:
page=page[end_quote: ]
start_link=page.find('<a href=')
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
URL=page[start_quote+1:end_quote]
print URL
注意在冒号后面加一个空格指的是从这个位置一直到最后。
我们还可以继续寻找第三个URL
page=page[end_quote: ]
start_link=page.find('<a href=')
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
URL=page[start_quote+1:end_quote]
print URL
这个过程我们可以一直这样循环下去,为了减少人力,节省时间我们该怎么办呢?让电脑去做就好了。
我们要做的第一件事就是过程抽象,它是什么意思呢?
指的是写一次代码,供很多次使用,改变输入变量来获得不同的输出,上面写的很多代码都是一样的,意味着我们要一遍一遍地做着重复的事情。在网页上找到链接的起始部分,在end_qvote找到起始引号的部分,接着提取链接,然后打印网址。不同的是page不同的值,持续更新不同的值,就可以获得不同的输出。
过程抽象背后的原理是什么呢?
将任何重复性的工作,抽象化,然后我们写代码把它编成一个过程,我们要把变量变成输入,也就是page变成输入,把URL变成输出。
过程是什么呢?
指的是过程指的是获取输入,输入可能不止一种,对这些输入进行处理,并得出输出结果。
这个抽象过程可以用这个表达式表示:
def<name>(<parameters>):
<block>
block在定义中是缩进的,我们喜欢空四格。下面block每一行都需要缩进四格,如果没有缩四格代表block结束。
我们下面开始过程化:
page=…contents of some web page…
start_link=page.find('<a href=')
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
URL=page[start_quote+1:end_quote]
print URL
上面是在一个网页中搜索到的第一个URL
为了搜索相同的第二个我们可以再写一次:
page=page[end_quote: ]
start_link=page.find('<a href=')
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
URL=page[start_quote+1:end_quote]
def get_next_target(s):
start_link=s.find('<a href=')
start_quote=s.find('"',start_link)
end_quote=s.find('"',start_quote+1)
URL=s[start_quote+1:end_quote]
return(URL,end_quote)