2012-09-19 33 views
0

我想從列表中寫入項目到幾個文件。我想根據它的日期來命名每個文件。請記住,我知道我不應該使用正則表達式來抓取HTML,但暫時它可以爲我提供良好的服務。對不起,但我是初學者。這種刮擦只是爲了學術目的。先謝謝你。從列表中寫入項目到幾個文件 - Python

from urllib import urlopen 
    import re 

    webpage = urlopen('x').read() 
    date = re.compile('[0-9]{2}-[a-zA-Z]{3}-[0-9]{4}') 
    article = re.compile('<span>.*<div>', re.DOTALL) 
    findDate = re.findall(patFinderDate,webpage) 
    findArticle = re.findall(patFinderArticle,webpage) 

    listIterator = [] 
    listIterator[:] = range(0,1000) 

    for i in listIterator: 
     filename = findDate[i] 
     with open(filename,"w") as f: 
      f.write(i) 
      f.close() 
+0

你可以在範圍(0,1000)內爲我(或者甚至在範圍內爲1000) ')...這裏不需要'listIterator'。 – mgilson

+0

使用正則表達式來刮取html有什麼問題? –

+7

另外,你應該更清楚你的問題實際上是什麼......這是幹什麼的?它應該做什麼? – mgilson

回答

1

如果你確信你有儘可能多的日期文章,你可以大致重寫代碼如下:

from urllib import urlopen 
import re 

webpage = urlopen('x').read() 
date_p = re.compile('[0-9]{2}-[a-zA-Z]{3}-[0-9]{4}') 
article_p = re.compile('<span>.*<div>', re.DOTALL) 
allDates = re.findall(date_p,webpage) 
allArticles = re.findall(article_p,webpage) 

for date, article in zip(allDates, allArticles): 
    with open(date,"w") as f: 
     f.write(article) 

zip()功能「拉鍊」兩個iterables連成一片,並返回一個每次迭代2元組 - 這就是你需要檢查日期是否與文章一樣多的原因

+0

非常感謝您的回覆,這非常有幫助。但是,當我執行它時,只有一個文件是用一個特定日期創建的。如果我離開控制檯運行,我刪除該文件另一個出現在相同的日期,但不同的文章。關於發生什麼問題的任何想法。每篇文章只有一個日期,沒有重複。預先感謝您 –

+0

您可以嘗試查看'allDates'中的日期。例如。 'allDates中的日期:打印日期'。如果所有日期都相同,也許html中的日期也是一樣的。 –