所以我就这个问题提了很多问题,对不起。但就是这样。
所以我有这段代码:
import urllib
import urllib.request
from bs4 import BeautifulSoup
import sys
from collections import defaultdict
m_num=int(input('Enter number of monsters to look up: '))
for x in range(m_num):
name=input("Enter a monster's name: ")
url_name=name.replace(' ','_')
url=('http://yugioh.wikia.com/wiki/Card_Tips:{}'.format(url_name))
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page.read())
content = soup.find('div',id='mw-content-text')
links = content.findAll('a')
link_lists = defaultdict(list)
for link in links:
link_lists[x].append(link.get('title'))
all_lists = list(link_lists.values())
common_links = set(all_lists[0]).intersection(*all_lists[1:])
print('common links: ',common_links)
我要做的是用户指定的怪物数量是多少列表是创建的。然后,每个列表都填充该特定站点的所有链接。然后在内部比较所有列表,看看它们内部是否有类似的字符串。 (希望这是有道理的)。
所以我遇到的问题是,当我运行它并进入print('common links:',common_links)
部分时,它只打印出最后一个列表。它不会比较列表,也不会识别其他列表是否已创建。
任何人都可以伸出援助之手吗?我一直在对此进行故障排除,我只是卡住了。
答案 0 :(得分:1)
link_lists
引用每次迭代的新字典。您可以将其排除:将all_lists = []
放在for x in range(m_num)
循环之前。并使用以下代码替换循环中的最后3行:all_lists.append([link.get("title") for link in links])
注意:在这种情况下您不需要知道m_num
:
all_lists = []
for name in iter(lambda: input("monster name"), ""): # loop until empty name
# ...
titles = [link["title"] for link in content.findAll('a', title=True)]
all_lists.append(titles)