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