Я новичок в python и написал следующий код для анализа нескольких XML-файлов в каталоге и записи содержимого в центральный CSV-файл.
У меня есть папка с примерно 30 XML-файлами. Моя проблема заключается в том, что он получает только содержимое первого XML-файла в папке, но не все остальное. Я думаю, что у меня проблема с отсутствием цикла? Я использую Beautifulsoup и хотел бы придерживаться этого, поскольку у меня есть понимание этого.
#open beautifulsoup library AND csv function
from bs4 import BeautifulSoup
import csv
import glob
#Open and read files in folder ending with .xml
for filename in glob.glob("*.xml"):
with open(filename) as open_file:
content = open_file.read()
soup = BeautifulSoup(content, 'lxml')
#open and write csv file
csv_file = open('scrape.csv', 'a')
post_line = ['postid', 'subreddit', 'post title', 'author', 'post url', 'post date', 'post time', 'post score', 'submission text']
csv_writer = csv.writer(csv_file)
csv_writer.writerow(post_line)
#grab content from xml from following textblocks
#postid
for postid in soup.find('textblock', tid='7').text:
pid = postid.split(':')[1]
print(pid)
#subreddit
for subreddit in soup.find('textblock', tid='15').text
subred = subreddit.split(':')[1]
print(subred)
#post title
for posttitle in soup.find('textblock', tid='12').text
ptitle = posttitle.split(':')[1]
print(ptitle)
#author
for username in soup.find('textblock', tid='0').text
author = username.split(':')[1]
print(author)
#post url
for posturl in soup.find('textblock', tid='13').text
url = posturl.split(':')[2]
purl = f'https:{url}'
print(purl)
#post date
for postdate in soup.find('textblock', tid='3').text
pdate = postdate.split()[1]
print(pdate)
#post time
for posttime in soup.find('textblock', tid='3').text
ptime = posttime.split()[2]
print(ptime)
#post score
for postscore in soup.find('textblock', tid='10').text
pscore = postscore.split(':')[1]
print(pscore)
#submission text
for submission in soup.find('textblock', tid='20').text
print(submission)
#blank space
print()
csv_writer.writerow([pid, subred, ptitle, author, purl, pdate, ptime, pscore, submission])
csv_file.close()