繁体   English   中英

循环将字符串列表追加到另一个列表中的字符串

[英]Loop to append a list of strings to the strings in another list

我试图使标题更清楚,但实际上需要更多的措辞。

我需要做的是:

我有一个网址列表。 在每个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.htmlwww.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的列表。 有人可以帮我从这里出去吗?

尝试这个:

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)

并且所有文件名都在同一列表中。

那是你的实际问题; 与其将结果放入平面列表中,然后以后再尝试对它们进行排序,不如使用字典来使它们保持正确的关联:

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'],
 ...
}

您可以通过适当地加入来获得所有URL:

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

请注意,如果您想要的只是最终列表,则可以加入原始函数,然后以以下形式返回最终列表:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM