0

我需要使用 FINDALL 来抓取所有特定的网页并将它们传递到一个数组中,但是只有不带引号的链接这是我到目前为止所拥有的,如果不是一个数组,我可以将一个变量传递给我可以使用的循环中的每个单独的链接他们一个接一个或一次全部

#!/usr/bin/env python
import re,urllib,urllib2

Url = "http://www.ihiphopmusic.com/music"
print Url
print 'test .............'
req = urllib2.Request(Url)
print "1"
response = urllib2.urlopen(req)
print "2"
#reads the webpage
the_webpage = response.read()
#grabs the title
the_list = re.findall(r'number-link" href="(.*?)#comments">0</a>',the_webpage)
print "3"
the_list = the_list.split(',')
arrlist = array('c',the_list)
print arrlist

结果

http://www.ihiphopmusic.com/music
test .............
1
2
3
Traceback (most recent call last):
  File "grub.py", line 17, in <module>
    the_list = the_list.split(',')
AttributeError: 'list' object has no attribute 'split'
4

3 回答 3

0

re.findall返回非重叠匹配的列表。您正在尝试拆分列表,这就是为什么您会收到 AttributeError (list对象没有split方法)。我不确定您要通过此来完成什么。您想拆分单个匹配项并将其存储在可迭代对象中吗?如果是这样,您可以执行以下操作:

import itertools
results = itertools.chain(*[x.split(',') for x in the_list])
于 2012-08-15T16:26:41.160 回答
0

据我所知(如果我错了,请纠正我),你已经在那里了 :) 正如@mgilson 指出的那样,它已经是一个列表:

#grabs the title
the_list = re.findall(r'number-link" href="(.*?)#comments">0</a>',the_webpage)
print "3"
print type(the_list)
print the_list

所以你可以迭代它来做你想做的事:

for item in the_list:
    print item
于 2012-08-15T16:32:06.693 回答
0

'split' 是字符串对象的属性,而不是列表对象。AttributeError 源于尝试在列表上使用 split 。如果你打印 the_list,你会看到它已经是一个列表。如果要拆分列表并将每个 URL 显示在单独的行上,可以使用print '\n'.join(the_list).

于 2012-08-15T16:37:41.347 回答