2016-03-14 182 views
0

我試圖讓標題更清晰,但它確實需要更多的措辭。將字符串列表追加到另一個列表中的字符串

我需要做的事:

我有一個URL列表。在每個URL(實際網站)中,都包含HTML中包含的文件名。我已經抓取了一個網站來獲取每個URL的列表以及包含在每個URL中的所有文件名的另一個列表,並且所有文件名都在同一個列表中。

我需要將每個URL中每個文件的名稱追加到它們各自的頁面(位於文件名的前面的URL)。

清單的實施例:

list1 = ['www.something.com/a/','www.something.com/b/','www.something.com/c/'] 
list2 = ['adam.html','addison.html','bob.html','boris.html','claire.html','clarence.html'] 

的URL的結構是按字母順序排列,並且每個文件名與相應的字母開頭。

例如:我想採取www.something.com/a/並追加所有文件名到創建完整URL列表(及其文件名),如www.something.com/a/adam.html,www.something.com/a/addison.html

/a/步驟完成後,將循環移動到www.something.com/b/並追加b文件名一樣www.something.com/b/bobwww.something.com/b/boris

我想了一會兒。顯然,第一個障礙是我組合的列表長短不一。此外,我目前沒有由他們的前面/主頁URL分隔的文件名列表。我想也許我可以將它們循環成一個字典或數組,其中鍵是字母或家庭URL,但我不確定這是如何完成的,因爲我對這些都很陌生。

編輯添加代碼:

def get_top_urls(letters): 
    top_url_list = [] 
    for letter in letters: 
     top_url_list.append("http://www.basketball-reference.com/players/%s" % letter)` 

    player_urls = [] 
    for i in top_url_list: 
     result = re.findall("\/([a-z]+[0-9][0-9]\W[a-z]+)", str(urlopen(i).read())) 
     player_urls.append(result) 
    return player_urls 


    #for i in top_url_list: 



if __name__ == '__main__': 
    main() 

這是top_urlsplayer_urls我需要追加到彼此得到我最終需要的所有URL列表。 任何人都可以幫助我嗎?

+0

你能寫兩個列表的樣本嗎? –

+2

有什麼困難?看起來像一個簡單的任務在Python中 - 你有什麼問題,你有什麼嘗試? – AChampion

+0

如果您需要幫助,請提供您嘗試過的一些代碼。 SO不是代碼寫入服務。 – Munir

回答

0

,所有的文件名是在同一個列表。

這是您的實際問題;而不是夾緊你的成果轉化爲平面列表,然後嘗試將它們再整理出來,只是用一本字典,讓他們相關的正確:現在

def get_urls(letters): 
    url_dict = {} 
    for letter in letters: 
     top_url = "http://whatever.com/{}/".format(letter) 
     result = re.findall("\/([a-z]+[0-9][0-9]\W[a-z]+)", str(urlopen(top_url).read())) 
     url_dict[top_url] = result 
    return url_dict 

url_dict看起來像:

{'http://whatever.com/a/': ['addison.html', 'avery.html'], 
'http://whatever.com/b/': ['bob.html', 'boris.html'], 
... 
} 

你可以通過加入適當地得到所有的網址:

all_urls = [''.join(top, name) for top, names in url_dict.items() for name in names] 

請注意,如果你想要的是你可以只參加在原有功能和RET最終名單最後一個名單開始於:

get_all_urls(letters): 
    urls = [] 
    for letter in letters: 
     top_url = ... 
     players = re.findall(...) 
     for player in players: 
      urls.append(''.join(top_url, player)) 
    return urls 
+0

非常好。謝謝!這就是我一直在尋找的! –

+0

我確實有一個問題。我注意到你有'str(urlopen(i).read())))' 'i'是一個錯字還是這個快捷方式來計算第二個列表? –

+0

我剛剛從代碼中複製了該部分,但未對其進行更正,這是我的錯誤。固定! – tzaman

0

試試這個:

list1 = ['www.something.com/a/','www.something.com/b/','www.something.com/c/'] 
list2 = ['adam.html','addison.html','bob.html','boris.html','claire.html','clarence.html'] 

list3 = [] 

for item in list1: 
    letter = item[item.rfind('/')-1:item.rfind('/')] 
    print(item) 
    for each in list2: 
     if each[0] == letter: 
      list3.append(item + each) 

print (list3) 
相關問題