2014-02-11 49 views
1

我想制定一些腳本,使用Python和BeautifulSoup在網頁上拾取一些文本,並將它們很好地放在一起。他們理想的結果是這樣的:(使用Python)將輸出放入2個列表中,並將兩個列表中的每個元素進行配對

Port_new_cape Jan 23, 2009 12:05 
Brisbane July 24, 2002 03:12 
Liaoning Aug 26, 2006 02:55 

因爲網頁是在該公司的網站需要身份驗證和重定向,我的目標頁面的源代碼複製到一個文件並將其保存爲example.html在C:\爲了方便。源代碼的

部分是引述如下(它們在目標段落,並有更多的相似段落):

<tr class="ghj"> 
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a  href="./membercity.php?mode=view&amp;u=12563">Port_new_cape</a></td> 
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search  positions">452</a></td> 
    <td class="details"><div>South</div></td> 
    <td>May 09, 1997</td> 
    <td>Jan 23, 2009 12:05 pm&nbsp;</td> 
</tr> 

<tr class="ghj"> 
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">Brisbane</a></td> 
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">356</a></td> 
    <td class="details"><div>South</div></td> 
    <td>Jun 09, 1986</td> 
    <td>July 24, 2002 03:12 pm&nbsp;</td> 
</tr> 

<tr class="ghj"> 
    <td><span class="city-sh"><sh src="./citys/1.jpg" alt="boy" title="boy" /></span><a href="./membercity.php?mode=view&amp;u=12563">Liaoning</a></td> 
    <td class="position"><a href="./search.php?id=12563&amp;sr=positions" title="Search positions">1105</a></td> 
    <td class="details"><div>Southeast</div></td> 
    <td>March 09, 2007</td> 
    <td>Aug 26, 2006 02:55 pm&nbsp;</td> 
</tr> 

到目前爲止,以下是我有什麼(在多虧了腳本的某些部分紳士的幫助):

from bs4 import BeautifulSoup 
import re 
import urllib2 

url = r"C:\example.html" 
page = open(url) 
soup = BeautifulSoup(page.read()) 


#preparing the 1st list 
cities = soup.find_all(href=re.compile("u=")) 

LST = [] 

for city in cities: 
    ci = city.renderContents() 
    full_list = LST.append(ci) 


#preparing the 2nd list 

Dates = soup.find_all('td', {'class' : 'info'}) 

LSTTT = [] 

counter = 0 

while len(Dates) > counter: 
    datesGroup = Dates[counter].find_next_siblings('td') 
    if len(datesGroup) == 2: 
     ti = datesGroup[1].renderContents() 
     full_list_2 = LSTTT.append(ti) 

    counter += 1 


print full_list 

print full_list_2 

我的想法是把所有的輸出入2所列出,然後再結合各要素(他們要在2所列出通訊員一對一)。但是,當我運行腳本時,它會生成2個「無」列表。

我的問題:

  1. 出了什麼問題的列表?爲什麼他們是「無」?
  2. 如何結合2個列表中的每個元素,一旦它們成功?

非常感謝。

回答

2

list.append方法返回None,因爲它是就地操作。而是將結果存儲在其他變量,你可以使用LSTTLSTTT,因爲他們,這樣

ci = city.renderContents() 
LST.append(ci) 
... 
... 
    ti = datesGroup[1].renderContents() 
    LSTTT.append(ti) 
... 
... 
print(zip(LSTT, LSTTT)) 

zip函數返回所有的輸入iterables的相應元素的元組的列表。

如果你要打印的壓縮結果,withtout元組,你可以在它們之間迭代,這樣

for item1, item2 in zip(LSTT, LSTTT): 
    print(item1, item2) 
+0

thefourtheye,這是不可思議的!謝謝。因爲我需要單獨存儲結果。有沒有一種方法不使用元組,而是成對打印而不是寫:print LST [1] + LSTTT [0] ... print LST [-1] + LSTTT [-1]? –

+0

@MarkK你可以迭代數據,就像我在答案中顯示的一樣。請檢查。 :) – thefourtheye

+0

再次感謝,thefourtheye。你是一位大師。 –

相關問題