仅从for循环返回第一个元素

时间:2014-06-12 06:36:12

标签: python web-services

我有一个网址,我希望在打印时获得产品名称列表我获得所有产品名称,我正在创建一个网络服务,所以我必须返回产品名称,但我只是得到第一个元素,我已将产品名称移动到列表中然后返回它,但我仍然得到一个错误

AttributeError("'unicode' object has no attribute 'append'",)

这是我的代码

from bottle import route, run
import urllib2
from mechanize import Browser
from BeautifulSoup import BeautifulSoup


import sys
import csv
import re

@route('/hello')
def hello():
  texts=list();
  result='  ,'
  mech = Browser()
  url = "http://www.amazon.com"
  page = mech.open(url)

  html = page.read()
  soup = BeautifulSoup(html)
  last_page = soup.find('div', id="nav_subcats")
  for elm in last_page.findAll('a'):
    texts = elm.text
    texts=texts.replace(",",";")
    links = elm.get('href')
    links=url+links
    alltexts=texts+links
    texts.append(alltexts)
    return texts

run(host='localhost', port=8080, debug=True)

2 个答案:

答案 0 :(得分:0)

这是因为您正在尝试在unicode字符串上追加(这是一种列表方法)。

>>> texts = []
>>> texts.append(123)
>>> texts
[123]
>>> texts = u"Test"
>>> texts.append(" Hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'unicode' object has no attribute 'append'

答案 1 :(得分:0)

不确定这一点:

... alltexts=texts+links texts.append(alltexts) return texts

除了DhruvPathak提到的追加之外,还有其他一些问题:

1)你正在连接文本&amp;链接和分配给alltexts,但是你试图将它追加到文本中。

2)你的回归在循环内部,所以会在第一次迭代后发生。 这就是您只返回第一个元素的原因

我认为你需要更像

的东西
alltexts = []
for elm in last_page.findAll('a'):
    texts = elm.text
    texts=texts.replace(",",";")
    links = elm.get('href')
    links=url+links
    alltexts.append(texts+links)
return alltexts