链接获取列表

时间:2013-05-09 20:01:35

标签: python list python-3.x compare wiki

所以我就这个问题提了很多问题,对不起。但就是这样。

所以我有这段代码:

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)部分时,它只打印出最后一个列表。它不会比较列表,也不会识别其他列表是否已创建。

任何人都可以伸出援助之手吗?我一直在对此进行故障排除,我只是卡住了。

1 个答案:

答案 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)