Python函数输出重复值

时间:2014-07-21 18:59:51

标签: python csv for-loop beautifulsoup function

我已经定义了一个从网页上抓取数据的函数。在这个网页上有25个搜索结果(在我的情况下属性列表)。我已编写代码来查找所有这25个列表,然后尝试使用for循环在网页上的每个列表中调用我的函数。但是,输出显示相同的列表打印25次。我想知道是否可以将我的函数details()应用于找到的页面上的所有25个属性列表:listings = soup.find_all('article',{'role' : 'article'})。然后我需要将这些结果输出到CSV文件中。

我使用的是Python 2.7

这是我到目前为止所做的:

output = []
property = []

def address():
    for address in soup.find('span', {'itemprop' : 'address'}):
        property.append(address.text)
def sqft():
    for sqft in soup.find('dl',{'class' : 'property-info-sheet pier-5'}):
        property.append(sqft.text)
def lot():
    for lot in soup.find('dl',{'class' : 'property-info-sheet pier-6'}):
        property.append(lot.text)
def built():
    for built in soup.find('dl',{'class' : 'property-info-sheet pier-7'}):
        property.append(built.text)

def details():
    address()
    sqft()
    lot()
    built()

    file = 'output.csv'
    with open(file,'wb') as f:
       writer = csv.writer(f)   
       writer.writerow(property)

listings = soup.find_all('article',{'role' : 'article'})

for listing in listings:
    details()    

这会输出相同的列表25次。是否有可能每次上市一次而不是一次上市25次?

1 个答案:

答案 0 :(得分:1)

你的soup.find_all和soup.find调用是无关的,所以现在循环浏览列表是没有意义的。您需要将列表发送到详细信息:

for listing in listings:
    details(listing)

详细参考上市代替汤

def address(soup):
   ...
def sqft(soup):
   ...
def lot(soup):
   ...
def built(soup):
   ...
def details(soup):
   address(soup)
   sqft(soup)
   lot(soup)
   built(soup)