2016-10-01 3 views
0

Я написал этот код ниже, который сбрасывается с слов сайта OED.com по темам и дате и распечатывает их в списке.Как сохранить скребковый список в CSV-файле?

import requests 
import re 
import urllib2 
import os 
import csv 

year_search = 1550 
subject_search = ['Law'] 

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} 
request = urllib2.Request('http://www.oed.com/', None, header) 
f = opener.open(request) 
data = f.read() 
f.close() 
print 'database first access was successful' 

resultPath = os.path.join(path, 'OED_table.csv') 
htmlPath = os.path.join(path, 'OED.html') 
outputw = open(resultPath, 'w') 
outputh = open(htmlPath, 'w') 
request = urllib2.Request(
    'http://www.oed.com/search?browseType=sortAlpha&case-insensitive=true' 
    '&dateFilter='+str(year_search)+'&nearDistance=1&ordered=false&page=1' 
    '&pageSize=100&scope=ENTRY&sort=entry&subjectClass=' 
    + str(subject_search) + '&type=dictionarysearch', None, header) 
page = opener.open(request) 
urlpage = page.read() 
outputh.write(urlpage) 
new_word = re.findall(
    r'<span class=\"hwSect\"><span class=\"hw\">(.*?)</span>', urlpage) 
print str(new_word) 
outputw.write(str(new_word)) 
page.close() 
outputw.close() 

Теперь я хочу, чтобы напечатать их в файл CSV, но таким образом, что каждый год вход I будет помещен в ряд, и слова будут все попадают в линию строки.

Вроде как:

1550| word1| word2| etc.| 
1551| word1| word2| etc.| 

Кто-нибудь есть какие-нибудь идеи?

+0

Я понял, что у вас будет всего один год (в вашем коде 1550), а затем список слов (в вашем коде 'new_word'). Но я не вижу, где вы храните больше года и группу слов. Достаточно ли отобразить линию, соответствующую одному из лет? –

+0

Ваш отказ не работает. Я попробовал несколько разных значений 'year_search', и все они вернули то же самое, список, состоящий только из' ['nicker'] '. Пожалуйста, отредактируйте свой вопрос и измените его на то, что вернет более одного значения. – martineau

ответ

1

Предлагаю использовать метод csv.writer. Вот пример кода:

`

with open('/Applications/Python 3.5/Economic/OED_table.csv', 'w') as csv_file: 
    csv_writer = csv.writer(csv_file) 
    year = ["1550"] 
    new_word = ["apple", "banana"] 
    complete_row = year + new_word 
    csv_writer.writerow(complete_row) 
    # writes 1550, apple, banana to OED_table.csv 

`

Вы можете изменить его с петлей для вставки нескольких строк.

+0

Это прекрасно. Спасибо. – Kainesplain

0

После строки, где вы определяете new_word вы можете сделать следующее:

year_info = [str(year_search)] + new_word 
print '|'.join(year_info) 

Этот выход будет точно

1550 | word1 | word2 | и т.д. |

Смежные вопросы