Как получить содержимое каждого столбца между двумя строками, имеющими определенный класс в таблице, для возможного экспорта в CSV - PullRequest
0 голосов
/ 09 июня 2019

Я перебираю веб-сайт с данными о продуктах для возможного перехода на 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 продуктов, и количество версий и технических вариантов для каждой версии варьируется от продукта к продукту.

Я бы хотел:

  1. извлечь каждую из версий (td s с классом th_title).
  2. для каждой версии получите все технические варианты мощности, назначения, размеров и ссылку для скачивания, отдельно.

например. результат должен выглядеть так:

Версии с корпусом из боросиликатного стекла, "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 где:

  1. количество версий зависит от продукта.
  2. количество ссылок для каждой версии также варьируется.

PS: я заменил ссылки фиктивными данными.

Любая помощь очень ценится. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...