2012-09-19 18 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中的日期也是一样的。 –