先贴代码,这个任务主要是抽取链接到其他页面的超链接,然后进入,在抽取,再进入。如此反复。(抽取几次代码中是根据用户输入的次数决定)
import urllib
from BeautifulSoup import *
lst=list()
i=0
url = raw_input('Enter url:')
count=raw_input('Enter count:')
position=raw_input('Enter position:')
def crawl(url):
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
tags = soup('a')
for tag in tags:
lst.append(tag.get('href', None))
# url = lst[int(position)-1]
for i in range(int(count)+1):
print url
crawl(url)
url = lst[int(position)-1]
lst=[]
我用的是def一个函数然后递归调用的方法。
这次主要遇到的两个问题,
一个是构造的list,在每次进入函数时应该将它清零,否则输出的url将一直是第一次的。(因为其他的会被append()到后面)
二是关于能否在函数中修改传入的参数(本例中为url)的值,在这个例子中是不可以(参见crawl()中我注释掉的那行),但是我还没找到原因,如果在函数中修改url的值,同样一直输出第一次找到的url。
*python中设定要几次循环的方法:
for i in range(4)
则i会从0循环到3