Я перебираю веб-сайт с данными о продуктах для возможного перехода на Wordpress. Код страницы для каждого продукта содержит таблицу технических ссылок с номерами версий, указанными в td
с классом th_title
, за которыми следуют строки технических данных (мощность, обозначение, размеры, ссылка для скачивания) в td
с. Код для таблицы на каждой странице продукта более или менее похож на это:
<table cellpadding="0" cellspacing="0" <tr="">
<tbody>
<tr>
<th class="puissance">Power</th>
<th class="designation">Designation</th>
<th class="dimensions">Dimensions</th>
<th class="telechargement">Download</th>
</tr>
<tr>
<td class="th_title" colspan="4">Versions with borosilicate glass housing</td>
</tr>
<tr>
<td>1580lm</td>
<td>BOY100 12H830 PY 113</td>
<td>697</td>
<td><a href="link" target="_blank">Technical Data [zip]</a></td>
</tr>
<tr>
<td>1580lm</td>
<td>BOY100 12H840 PY 113</td>
<td>697</td>
<td><a href="link 2" target="_blank">Technical Data [zip]</a></td>
</tr>
<tr>
<td class="th_title" colspan="4">Versions with coextruded polycarbonate/PMMA housing</td>
</tr>
<tr>
<td>1580lm</td>
<td>BOY100 12H830 POME 113</td>
<td>697</td>
<td><a href="link 3" target="_blank">Technical Data [zip]</a></td>
</tr>
<tr>
<td>1580lm</td>
<td>BOY100 12H840 POME 113</td>
<td>697</td>
<td><a href="lin 4" target="_blank">Technical Data [zip]</a></td>
</tr>
</tbody>
</table>
На веб-сайте представлено более 200 продуктов, и количество версий и технических вариантов для каждой версии варьируется от продукта к продукту.
Я бы хотел:
- извлечь каждую из версий (
td
s с классом th_title
).
- для каждой версии получите все технические варианты мощности, назначения, размеров и ссылку для скачивания, отдельно.
например. результат должен выглядеть так:
Версии с корпусом из боросиликатного стекла, "1580lm, 1580lm", "BOY100 12H830 PY 113, BOY100 12H830 PY 113", "697, 697", "link.zip, link1.zip",
Версии с соэкструдированным поликарбонатом / корпусом из ПММА, «1580lm, 1580lm», «BOY100 12H830 POME 113, BOY100 12H830 POME 113», «697, 697», «link2.zip, link3.zip»
и т. Д.
Для каждого из продуктов я могу извлечь данные из таблицы следующим образом:
import requests
producturl = 'http://www.sammode.com/fr/produits/vermeer-plafonnier-_-interieur-1240.html'
r1 = requests.get(producturl)
from bs4 import BeautifulSoup
soup1 = BeautifulSoup(r1.text, 'html.parser')
productdata = []
producttable = soup1.find('div', class_='ref_principales').find('table')
tablerows = producttable.find_all('tr')
table = []
for tr in tablerows:
tablerow = []
if tr.find_all('td', class_='th_title') :
version = tr.find_all('td', class_='th_title')
for v in version:
tablerow.append(v.get_text(strip=True))
else :
for td in tr.find_all('td') :
if td.find('a'):
tablerow.append(td.find('a')['href'])
else :
tablerow.append(td.get_text(strip=True))
table.append(tablerow)
productdata.append((table))
import pandas as pd
df = pd.DataFrame(productdata, columns=['table'])
df.to_csv('products_fr.csv', index=False, encoding='utf-8-sig')
Результаты из приведенного выше кода выглядят так:
[[], ['Version travaux neufs'], ['3700lm', 'AMU100 14H830 POME PS3 SA', '1318mm', 'link.rar'], ['3700lm', 'AMU100 14H840 POME PS3 SA', '1318mm', 'link.rar'], ['5550lm', 'AMU100 16H830 POME PS3 SA', '1850mm', 'link.rar'], ['5550lm', 'AMU100 16H840 POME PS3 SA', '1850mm', 'link.rar'], ['Version retrofit remplacement un pour un : équivalence au 1x36W T8'], ['2775lm', 'AMU100 13H830 POME PS3 SA', '1018mm', 'link.rar'], ['2775lm', 'AMU100 13H840 POME PS3 SA', '1018mm', 'link.rar'], ['Version retrofit remplacement un pour un : équivalence au 1x58W T8'], ['4625lm', 'AMU100 15H830 POME PS3 SA', '1018mm', 'link.rar'], ['4625lm', 'AMU100 15H840 POME PS3 SA', '1018mm', 'link.rar']]
Я не могу понять, как извлечь данные из каждого из столбцов таблицы (мощность, измерение, обозначение и ссылка), а не из строк таблицы в каждой из версий, а затем экспортировать их линейным способом в CSV где:
- количество версий зависит от продукта.
- количество ссылок для каждой версии также варьируется.
PS: я заменил ссылки фиктивными данными.
Любая помощь очень ценится. Спасибо!