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

时间:2016-03-14 22:19:33

标签: python web-scraping

我试图让标题更清晰,但它确实需要更多的措辞。

我需要做什么:

我有一个网址列表。在每个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/并将所有文件名附加到创建完整网址列表(及其文件名),例如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

我已经考虑了一段时间了。显然,第一个障碍是我组合的列表是不同的长度。此外,我目前还没有以前/ home网址分隔的文件名列表。我想也许我可以将它们循环到字典/数组中,其中的键是字母或主页,但是我不确定这是怎么做的,因为我对这一切都很新。 / p>

编辑以添加代码:

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我需要相互追加以获取我最终需要的所有网址的列表。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

  

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

那是你的实际问题;而不是将结果放入平面列表,然后尝试将它们排序,只需使用字典来保持它们的正确关联:

goto

现在您的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]