我有一个大约有21个网址的网站地图,每个网址都包含大约2000个网址。我试着写一些能让我解析原始21个网址的内容并抓住它们包含的2000个网址然后将其附加到列表中。
我现在一直在墙上砸了几天,试图让它发挥作用,但它一直在返回一个“无”的清单。我现在只使用python工作了大约3个星期,所以我可能会遗漏一些非常明显的东西。任何帮助都会很棒!
storage = []
storage1 = []
for x in range(21):
url = 'first part of the url' + str(x) + '.xml'
storage.append(url)
def parser(any):
tree = ET.parse(urlopen(any))
root = tree.getroot()
for i in range(len(storage)):
x = (root[i][0]).text
storage1.append(x)
storage2 = [parser(x) for x in storage]
我也尝试使用带有计数器的while循环,但它总是在第一个2000 url之后停止。
答案 0 :(得分:1)
parser()
从不return
任何内容,因此默认返回None
,因此storage2
包含None
列表的原因。也许你想看看storage1
中的内容?
答案 1 :(得分:1)
如果你没有在python中声明函数的返回,它会自动返回None
。在parser
内,您需要向storage1
添加元素,但不会返回任何内容。我会试着这样做。
storage = []
for x in range(21):
url = 'first part of the url' + str(x) + '.xml'
storage.append(url)
def parser(any):
storage1 = []
tree = ET.parse(urlopen(any))
root = tree.getroot()
for i in range(len(storage)):
x = (root[i][0]).text
storage1.append(x)
return storage1
storage2 = [parser(x) for x in storage]
编辑:正如Amber所说,您还应该看到所有元素实际存储在storage1
中。
答案 2 :(得分:1)
如果我理解你的问题,你的程序有两个阶段:
您的第一步可能如下所示:
initial_urls = [('http://...%s...' % x) for x in range(21)]
然后,要从页面填充大型URL列表,您可以执行以下操作:
big_list = []
def extract_urls(source):
tree = ET.parse(urlopen(any))
for link in get_links(tree):
big_list.append(link.attrib['href'])
def get_links(tree):
... - define the logic for link extraction here
for url in initial_urls:
extract_urls(url)
print big_list
请注意,您必须自己编写从文档中提取链接的过程。
希望这有帮助!
答案 3 :(得分:0)
您必须在解析器函数中返回storage1
def parser(any):
tree = ET.parse(urlopen(any))
root = tree.getroot()
for i in range(len(storage)):
x = (root[i][0]).text
storage1.append(x)
return storage1
我认为这就是你想要的。