Я новичок в Python, и мне удалось собрать сценарий вместе, но я борюсь с записью в CSV, несмотря на то, что много об этом читал.
Мой сценарий (ниже) сканирует список импортированных URL-адресов (страниц для сканирования) и считывает все абзацы (теги p), которые находятся внутри раздела, который имеет класс 'holder'
. Всего разделов 4 'holder'
.
Я хочу записать вывод в CSV, где 'section'
- заголовок столбца, а каждый 'paragraph'
образует соответствующую строку.
Возможно ли это?
Вот мой сценарий:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas
import csv
filename = "results.csv"
csv_writer = csv.writer(open(filename, 'w'))
contents = []
with open('list.csv','r') as csvf: # Open file in read mode
urls = csv.reader(csvf)
for url in urls:
contents.append(url) # Add each url to list contents
p = [[],[],[],[]]
for url in contents:
page = urlopen(url[0]).read()
soup = BeautifulSoup(page, "lxml")
n = 0
for container in soup.find_all("section", {'class':'holder whyuse'}): #
Ignore this section.
container.decompose()
for container in soup.find_all("section", {'class':'holder centertc'}): #
Ignore this section.
container.decompose()
for container in soup.find_all("section",attrs={'class': 'holder'}):
print('==','Section',n+1,'==')
for paragraph in container.find_all("p"):
p[n].append(paragraph)
print(paragraph)
n += 1
w = pandas.DataFrame(p).transpose()
w.columns=['Section 1','Section 2','Section 3','Section 4']
w.to_csv(results.csv)
, который в настоящее время выводит 4 раздела с абзацами для каждого раздела, в то время как я хочу, чтобы сформировался print('==','Section',n,'==')
заголовки столбцов CSV и print(paragraph)
для генерации значений ячеек в каждом столбце.
Полагаю, мне нужна некоторая форма группировки для создания 4 разделов с соответствующими абзацами и экспорта в CSV. .
Пример вывода из текущего скрипта при извлечении 2 х URL-адресов из импорта:
== Section 1 ==
<p>This is paragraph one in section one from the first url.</p>
<p>This section one has another paragraph here too in the first url.</p>
<p>Finally a third paragraph in section one of the first url.</p>
== Section 2 ==
<p>This is paragraph one in section two of the first url and only has one paragraph.</p>
== Section 3 ==
<p>This is the first paragraph in section 3 of the first url.</p>
<p>Section three in the first url has a second paragraph.</p>
== Section 4 ==
<p>Section four also only has one paragraph in the first url.</p>
== Section 1 ==
<p>This is the first paragraph in the second url.</p>
<p>The second url only has two paragraphs in section one.</p>
== Section 2 ==
<p>This is a paragraph in section two of the second url.</p>
<p>This is the second paragraph in section two of the second url.</p>
== Section 3 ==
<p>Section 3 in the second url only has one paragraph and this is it.</p>
== Section 4 ==
<p>This is the first paragraph in section four of the second url.</p>
<p>Section four of the second url also has this second paragraph.</p>
<p>Section four of the second url has three paragraphs.</p>
Таким образом, для CSV нужны 4 заголовка столбца (Раздел 1, Раздел 2, Раздел 3, Раздел 4) и каждому столбцу нужны соответствующие абзацы, например, столбец «Раздел 1» будет заполнен:
Col 1 / Section 1 - Row 1:
<p>This is paragraph one in section one from the first url.</p><p>This section one has another paragraph here too in the first url.</p><p>Finally a third paragraph in section one of the first url.</p>
Col 1 / Section 1 - Row 2:
<p>This is the first paragraph in the second url.</p><p>The second url only has two paragraphs in section one.</p>
Col 2 / Section 2 - Row 1:
<p>This is paragraph one in section two of the first url and only has one paragraph.</p>
Col 2 / Section 2 - Row 2:
<p>This is a paragraph in section two of the second url.</p>
<p>This is the second paragraph in section two of the second url.</p>
Et c et c