我已经定义了一个从网页上抓取数据的函数。在这个网页上有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次?
答案 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)