将字符串列表追加到另一个列表中的字符串
我试图让标题更清晰,但它确实需要更多的措辞。将字符串列表追加到另一个列表中的字符串
我需要做的事:
我有一个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/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列表。 任何人都可以帮助我吗?
,所有的文件名是在同一个列表。
这是您的实际问题;而不是夹紧你的成果转化为平面列表,然后尝试将它们再整理出来,只是用一本字典,让他们相关的正确:现在
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
非常好。谢谢!这就是我一直在寻找的! –
我确实有一个问题。我注意到你有'str(urlopen(i).read())))' 'i'是一个错字还是这个快捷方式来计算第二个列表? –
我刚刚从代码中复制了该部分,但未对其进行更正,这是我的错误。固定! – tzaman
试试这个:
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)
你能写两个列表的样本吗? –
有什么困难?看起来像一个简单的任务在Python中 - 你有什么问题,你有什么尝试? – AChampion
如果您需要帮助,请提供您尝试过的一些代码。 SO不是代码写入服务。 – Munir