2016-07-23 40 views
0

寫在excel中遞歸數據我有一個叫做網頁列表:html從Python列表

每個

一位html(i)元素提取我的電子郵件地址。我把這些電子郵件地址列表:email

我要生成一個Excel文件這樣的:

enter image description here

爲了寫上一個Excel文件,所有我發現電子郵件地址。

由於每個html(i)頁面可能包含不同數量的電子郵件地址,因此我想編寫一個代碼來自動考慮每頁找到的不同電子郵件數量。

我的想法是與此類似:

#set the standard url to generate the full list of urls to be analyzed 
url = ["url1","url2", "url3", "url-n"] 

#get all the url pages' html codes 
for i in range (0,len(url): 
    html=[urllib.urlopen(url[i]).read() for i in range(0,len(url)) ] 

#find all the emails in each html page. 
for i in range (0,len(url): 
    emails = re.findall(r'[\w\.-][email protected][\w\.-]+', html[i]) 

#create an excel file 
wb = Workbook() 

#Set the excel file. 
for i in range (0,len(html)): 
    for j in range (0, len(emails)): 
     sheet1.write(i, j, emails[j]) 

wb.save('emails contact2.xls') 

當然是行不通的。它只寫入list html最後一個元素中包含的電子郵件地址。有什麼建議麼?

+0

我不確定我明白你描述的'emails'列表是什麼。它是某種嵌套列表嗎?如果沒有,你可能需要在你的外部循環中生成它(而不是提前)。 – Blckknght

+0

1個列表'emails'沒有任何意義..你如何分開每個'html'的郵件?你有每個'html'的列表嗎?也許你想使用'dict'? –

+0

我修改了代碼,粘貼了我正在處理的內容。我希望你們更清楚。感謝您的幫助 –

回答

0
import xlwt 
wb = Workbook() 
sheet1 = wb.add_sheet("Sheet 1") 

htmls = generate_htmls() #Imaginary function to pretend it's initialized. 
for i in xrange(len(htmls)): 
    sheet1.write(i, 0, htmls[i]) 
    emails = extract_emails(htmls[i]) #Imaginary function to pretend it's extracted 
    for j in xrange(len(emails)): 
     sheet1.write(i, j + 1, emails[i]) 

假設您單獨提取列表emails每個HTML,這些代碼會將HTML中的第一個(索引0)列,然後把所有的電子郵件中index + 1(不覆蓋第一列)。

+0

它的工作原理,感謝Yotam –

+0

@GiacomoBonvini謝謝你將我的答案標記爲正確。但我有一個問題要問你 - 你明白爲什麼它有效嗎?因爲我不想讓人們複製粘貼我的答案,我希望人們向他們學習。你有沒有明白,還是應該補充一些解釋? –

+0

感謝您的想法。我想我已經理解它是如何工作的。它逐行寫入固定第一列中的html,然後將電子郵件寫入其他列。正確?當然,如果你有任何其他意見,歡迎。我開始在python 3天前編程eheh –

0

我不知道xlwt,但考慮到你有每個htmlemails列表會這樣的工作?

import xlwt 
wb = Workbook() 

for html_index, html in enumerate(html): 
    sheet1.write(html_index, 0, html.address) 
    for email_index, email in enumerate(emails_for_html): 
      sheet1.write(html_index, email_index + 1, email) 

wb.save('email contacts.xls') 

請注意,我不知道xlwt特定的命令,只是想模仿你的。

+0

'enumerate'基於0,所以在'email_index'中寫入將覆蓋第一列中的html ..它應該是'email_index + 1' :-) –

+0

@Yotam鮭魚你是對的:)更新 –

+0

感謝您的編輯!另外,'enumerate(email_for_html,1)'(提供一個初始值爲1)的選項也是可以的;-) –