【问题标题】:How do I write all of these rows into a CSV file for a given range?如何将所有这些行写入给定范围的 CSV 文件?
【发布时间】:2017-02-25 15:16:09
【问题描述】:

以下代码的目的是在牛津英语词典中搜索在几年范围内每年“发明”的单词。这一切都按预期工作。

import csv
import os
import re
import requests
import urllib2

year_start= 1550
year_end = 1552
subject_search = ['Law']

for year in range(year_start, year_end +1):
    path = '/Applications/Python 3.5/Economic'
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
    urllib2.install_opener(opener)

    user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
    header = {'User-Agent':user_agent}

    resultPath = os.path.join(path, 'OED_table.csv')
    htmlPath = os.path.join(path, 'OED.html')
    request = urllib2.Request('http://www.oed.com/search?browseType=sortAlpha&case-insensitive=true&dateFilter='+ str(year)+ '&nearDistance=1&ordered=false&page=1&pageSize=100&scope=ENTRY&sort=entry&subjectClass='+ str(subject_search)+ '&type=dictionarysearch', None, header)
    page = opener.open(request)

    with open(resultPath, 'wb') as outputw, open(htmlPath, 'w') as outputh:
        urlpage = page.read()
        outputh.write(urlpage)

        new_words = re.findall(r'<span class=\"hwSect\"><span class=\"hw\">(.*?)</span>', urlpage)
        print new_words
        csv_writer = csv.writer(outputw)
        if csv_writer.writerow([year] + new_words):
            csv_writer.writerow([year, word])

但是,当我实际运行代码时,写入 csv 文件的唯一部分是我调用的最后一年。所以,我的 csv 文件最终看起来像这样的一行:

1552、word1、word2、word3 等......

我基本上想在年份范围内为每一年单独设置一行。我该怎么办?

【问题讨论】:

    标签: python-2.7 csv web-scraping


    【解决方案1】:

    您在循环中不断覆盖,每次运行代码时,在循环外打开一次并追加到以a而不是w打开的文件,因此每次运行代码将添加到现有数据而不是覆盖。:

    with open("/Applications/Python 3.5/Economic/OED_table.csv", 'a') as outputw, open("/Applications/Python 3.5/Economic/OED.html", 'a') as outputh:     
        for year in range(year_start, year_end +1):
           .....................
    

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2021-12-19
      • 2019-08-22
      相关资源
      最近更新 更多