urllist = ['http://example.com',
'http://example1.com']
i = 0
while i < len(urllist):
source = urllib.urlopen(urllist[i]).read()
regex = '(\d{3})/">(\w+\s-\s\w+)</a>' # e.g. '435', 'Tom-Jerry'
p = re.compile(regex)
db = re.findall(p, source)
db = [tuple(filter(None, t)) for t in db]
hero_id = []
for i in db:
hero_id.append(i[0])
i += 1
print hero_id
db = [tuple(filter(None, t)) for t in db]
db
是這樣的元組的列表:[('564', 'Tom', 'Jerry'), ('321', 'X-man', 'Hulk')]
類型錯誤:只能級聯元組(未「INT」)到元組
這背後的邏輯應爲以下:用urllist[0]
剛開始時,搜索正則表達式,收集db
,在db
每個元組,採取從數組的元素[0]
(數量),並追加到hero_id
列表。當你做了,加1到i
和urllist
重複整個過程爲下一個網址,同時是沒有的左邊。
當我運行這段代碼,我得到這個:
i += 1 TypeError: can only concatenate tuple (not "int") to tuple
i += 1
中的代碼外的for循環使此異常驚喜我一點點。想法?
非常感謝你們。看似簡單,但永遠不會想出來。這當然有用;還有第二個問題。它追加(到'hero_id'列表)只有來自'urllist'第二個網址的數字嗯...我猜'append'方法首先從第一個鏈接附加數字,然後從第二個網址發佈它們和附加數字。任何不同的方法的想法可能? – nutship 2013-03-09 20:44:01
列表中的項目未被刪除。相反,您的循環會在循環中第二次創建一個新的空列表。這本身對第一次創建的第一個列表沒有幫助,第一次通過。然而,因爲名字「hero_id」現在被綁定到不同的列表,並且沒有名字被綁定到第一個列表,所以你不能再獲得第一個列表(並且它將被垃圾收集)。如果你想讓列表中的所有id結束,只需將hero_id = []行移出循環 – 2013-03-09 23:45:28