[英]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.html
, www.something.com/a/addison.html
。
后/a/
完成后,循环转移到www.something.com/b/
并追加b
文件名一样www.something.com/b/bob
, www.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_urls
和player_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.