xrange和列表迭代的问题

时间:2014-05-16 01:10:29

标签: python iterator

我试图通过在请求模块中拆分响应字符串来迭代创建的列表,我的目标是操纵并将捕获的数据添加到集合中; xrange中的每个页面应该只有我正在查找的值的40个,但看起来我的代码正在获取每次迭代的最后一个值并将其添加到列表而不是每个值。因此,应该执行一些字符串添加的循环如此:'http://example.com' + link1 + '.html', 'http://example.com' + link2 + '.html', 'http://example.com' + link3 + '.html', ...会返回不需要的子字符串,如:'http://example.com' + 'l' + '.html', 'http://example.com' + 'i' + '.html', 'http://example.com' + 'n' + '.html' , ...。我怎样才能改变这个目标以及为什么会这样做。

last_pg = 10
    BASE_URL = 'http://example.com?act=view&NowPage=%s'
    urls = set()
    for i in xrange(last_pg):
        response = requests.get(BASE_URL % i)
        parsed_body = html.fromstring(response.text)
        links = response.text.split('-p-')[-1].split('-cat-')[0]
        print links #this seems to print the last value of each iteration rather than all of them
        for link in links:# this loop breaks down each link value into substrings and performs the interpolation on the substrings
            finallink = ('http://example.com-' + link.encode('ascii', 'ignore') + '.html')
            urls.add(finallink)
            print "added %s to que" % finallink
    print urls
    print len(urls)

1 个答案:

答案 0 :(得分:1)

拆分返回一个列表,但您正在使用该列表的索引进行第二次拆分,因此您只能从中获取单个元素。 response.text.split('-p-')为您提供了一个列表,但response.text.split('-p-')[-1]为您提供了该列表的最后一个元素。如果你做了类似的事情:

links = [x.split('-cat-')[0] for x in response.split('-p-')] 

您可以获得所需内容的列表,但是您可能需要通过更改从'-cat-'拆分中获得的索引或通过该拆分中的列表进行另一次迭代来进行更多处理。

你只是获得单个字母的原因是因为你是在迭代字符串而不是字符串列表,所以它会从字符串中产生字符,而不是单个字符串。