Я хочу последовательно открывать html-файлы в папке каталога, анализировать информацию с помощью Beautifulsoup и сохранять ее как CSV-файл. - PullRequest
0 голосов
/ 12 октября 2019

Сначала я попытался открыть только файл с именем index.html, проанализировать его и сохранить как файл csv. Это был код, и он работал хорошо. введите описание изображения здесь

with open('/Users/kwon/Downloads/cnn/index.html') as html_file:
    soup = BeautifulSoup(html_file, 'html.parser')

cnn_file = open('cnn2.csv', 'w')
cnn_writer = csv.writer(cnn_file)
cnn_writer.writerow(['filename','date','headline','text'])

filename = 'index000'
print(filename)

date = soup.find(class_='update-time').text
date = date.split(' ')[5]+' '+date.split(' ')[6]+' '+date.split(' ')[7]
print(date)

headline = soup.title.text
headline = headline.split('-')[0]
print(headline)

txt = soup.find(class_="zn zn-body-text zn-body zn--idx-0 zn--ordinary zn-has-multiple-containers zn-has-r'\d*'-containers").text 
print(txt) 

cnn_writer.writerow([filename, date, headline, txt])
cnn_file.close()

Но я хочу повторить тот же процесс для всех html-файлов (index.html ~ index591.html) в папке каталога. Поэтому я начал с использования модуля glob для последовательного открытия файлов. Затем попытался разобрать цикл, как я делал раньше. Почему-то я не знаю, как читать и анализировать их последовательно и назвать имя файла от «index000» до «index591». Также, если я запускаю приведенный ниже код, я получаю сообщение об ошибке «find () не принимает аргументов с ключевыми словами».

import glob    
path = '/Users/kwon-yejin/Downloads/cnn2/*.html'   
files=glob.glob(path) 
for file in files:
    html = open(file, 'r')
    soup = bs4.BeautifulSoup(html, 'html.parser')

for line in soup:
    filename = 'index000'
    print(filename)

    date = line.find(class_='update-time').text
    date = date.split(' ')[5]+' '+date.split(' ')[6]+' '+date.split(' ')[7]
    print(date)

    headline = line.title.text
    headline = headline.split('-')[0]
    print(headline)

    txt = line.find(class_="zn zn-body-text zn-body zn--idx-0 zn--ordinary zn-has-multiple-containers zn-has-21-containers").text 
    print(txt)

1 Ответ

0 голосов
/ 12 октября 2019

Считать и проанализировать их последовательно имя файла от 'index000' до 'index591'

path = '/Users/kwon-yejin/Downloads/cnn2/'

for i in range(592):
    file = path+'index'+str(i).zfill(3)+'.html'
    print(file)

        /Users/kwon-yejin/Downloads/cnn2/index000.html
        /Users/kwon-yejin/Downloads/cnn2/index001.html
        /Users/kwon-yejin/Downloads/cnn2/index002.html
        /Users/kwon-yejin/Downloads/cnn2/index003.html
        ..................
        /Users/kwon-yejin/Downloads/cnn2/index589.html
        /Users/kwon-yejin/Downloads/cnn2/index590.html
        /Users/kwon-yejin/Downloads/cnn2/index591.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...