【发布时间】:2013-12-01 04:04:43
【问题描述】:
我正在制作一个搜索所有网页的网络爬虫。我得到了http://www.someURL.com/42342 的第一个链接。在此页面上是X 表达式的行数。 parse 和 evaluate 函数我已经将这些表达式计算为数字。使用这些数字,我将它们连接到默认链接 (http://www.someURL.com/) 以转到另一个链接。我正在尝试计算有多少网页,但我目前遇到了这个错误:
Traceback (most recent call last):
File "test2.py", line 72, in <module>
print url_queue(convert_to_link(URL))
File "test2.py", line 23, in url_queue
new_urls = convert_to_link(url)
File "test2.py", line 13, in convert_to_link
num_list.append(evaluate(parse(expressions)))
File "test2.py", line 62, in evaluate
return stack[0]
IndexError: list index out of range
我不太清楚为什么。每个函数似乎都给出了正确的输出。有人可以帮助指出我的代码中的逻辑错误吗?
我的代码:
import urllib2
URL = 'http://www.someURL.com/42342'
def convert_to_link(url):
req = urllib2.Request(url)
response = urllib2.urlopen(req)
output_expressions = response.read().splitlines() #return each expression in a list
num_list = []
url_list = []
for expressions in output_expressions:
num_list.append(evaluate(parse(expressions)))
for number in num_list:
url_list.append(newpage_gen(number))
return url_list
def url_queue(url_list):
count = 0
for url in url_list:
new_urls = convert_to_link(url)
url_list.extend(new_urls)
count += 1
return count
def parse (s): # parse expression
s = s.replace('(', ' ').replace(')', ' ').replace(',', ' ')
return s.split()[::-1]
def evaluate (ops): # evaluate expression
stack = []
while ops:
op = ops[0]
ops = ops[1:]
try:
stack.append(int(op))
continue
except: pass
if op == 'add':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 + arg2)
continue
if op == 'multiply':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 * arg2)
continue
if op == 'abs':
arg1 = stack.pop()
stack.append(abs(arg1))
continue
if op == 'subtract':
arg1, arg2 = stack.pop(), stack.pop()
stack.append(arg1 - arg2)
continue
return stack[0]
def newpage_gen(page_num): # create new link
url_template = 'http://www.someURL.com/'
new_url = url_template + str(page_num)
return new_url
print "TESTING"
print url_queue(convert_to_link(URL))
【问题讨论】:
-
你能发布导致问题的表达式吗?比如输入evaluate函数时
print ops的输出? -
@Liondancer 您是否希望这些 if 语句每次都触发?有没有一种情况下它们都不应该评估为真?
标签: python python-2.7 web-crawler