2016-03-14 180 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) 
相关问题