Задать вопрос
@Headballz

Как правильно спарсить таблицу из html с помощью Scrapy?

Имеется html страница с вложенными таблицами
5d925895eb570559461270.png
Интересующая таблица в html выглядит так:
<tr valign="top">
<td colspan="2" bgcolor="F2F2F2"><a href="/trk/fe/TEDIS_466.nsf/,DanaInfo=extranet2.de.tuv.com+Antragsdaten?OpenAgent&amp;U=9FE850F57F956872C1258366002703BB"><b>Abdellaoui, Sabrine</b></a></td>
<td bgcolor="F2F2F2">20.11.1995&nbsp;<img src="/trk/fe/TEDIS_466.nsf/,DanaInfo=extranet2.de.tuv.com+empty.gif?OpenImageResource" border="0" align="BOTTOM"></td>
<td bgcolor="F2F2F2"><b>0002906617</b></td>
<td bgcolor="F2F2F2"><b>477306</b></td>
</tr>
<tr valign="MIDDLE">
<td>&nbsp;&nbsp;&nbsp;</td>
<td bgcolor="FFFFFF">Theorie Klasse B</td>
<td bgcolor="FFFFFF">26.02.2019</td>
<td bgcolor="FFFFFF">bezahlt</td>
<td bgcolor="FFFFFF">bestanden</td>
</tr>
<tr valign="MIDDLE">
<td>&nbsp;&nbsp;&nbsp;</td>
<td bgcolor="FFFFFF">Fahren Klasse B</td>
<td bgcolor="FFFFFF"></td>
<td bgcolor="FFFFFF">offen</td>
<td bgcolor="FFFFFF">noch offen</td>
</tr>
<tr valign="top">
<td colspan="2" bgcolor="F2F2F2"><a href="/trk/fe/TEDIS_466.nsf/,DanaInfo=extranet2.de.tuv.com+Antragsdaten?OpenAgent&amp;U=513F853FA943F430C1258397002C01AF"><b>Abdulkader, Scheima</b></a></td>
<td bgcolor="F2F2F2">01.08.1997&nbsp;<img src="/trk/fe/TEDIS_466.nsf/,DanaInfo=extranet2.de.tuv.com+empty.gif?OpenImageResource" border="0" align="BOTTOM"></td>
<td bgcolor="F2F2F2"><b>0002929729</b></td>
<td bgcolor="F2F2F2"><b>481192</b></td>
</tr>
<tr valign="MIDDLE">
<td>&nbsp;&nbsp;&nbsp;</td>
<td bgcolor="FFFFFF">Theorie Klasse B</td>
<td bgcolor="FFFFFF">14.03.2019</td>
<td bgcolor="FFFFFF">bezahlt</td>
<td bgcolor="FFFFFF">bestanden</td>
</tr>
<tr valign="MIDDLE">
<td>&nbsp;&nbsp;&nbsp;</td>
<td bgcolor="FFFFFF">Fahren Klasse B</td>
<td bgcolor="FFFFFF"></td>
<td bgcolor="FFFFFF">bezahlt</td>
<td bgcolor="FFFFFF">noch offen</td>
</tr>


Вопрос:
Как спарсить данные так, чтобы в один словарь попадали строка tr valign="top" и все строки tr valign="MIDDLE" до следующей tr valign="top"?
Пример вывода, который должен получиться:
[
{"name": "Abdulkader, Scheima", "gebDatum": "20.11.1995", "aktenzeichen": "0002906617", "antragNr": "477306", "prufung": ["Theorie Klasse B", "Fahren Klasse B"], "prufungsdatum": ["26.02.2019", "14.03.2019"], "Zahlung": ["bezahlt", "offen"], "Ergebnis": ["bestanden", "noch offen"]}
]

Сейчас я вручную парсю все ячейки, но тогда в словарь не попадает вторая строка tr valign="MIDDLE".

def parse(self, response):
        all = response.xpath('//table[position()>2]/tbody')
        for fld in all:
            Item = DataItem()
            names = fld.xpath('//tr/td/a/b/text()').extract()
            bday = fld.xpath('//tr[@valign="top"]/td[position()=2]/text()').getall()
            pass_number = fld.xpath('//tr/td[position()=3]/b/text()').getall()
            order_number = fld.xpath('//tr/td[position()=4]/b/text()').getall()
            exam_name = fld.xpath('//tr[@valign="MIDDLE"]/td[position()=2]/text()').getall()
            exam_date = fld.xpath('//tr[@valign="MIDDLE"]/td[position()=3]/text()').getall()
            exam_pay = fld.xpath('//tr[@valign="MIDDLE"]/td[position()=4]/text()').getall()
            exam_result =fld.xpath('//tr[@valign="MIDDLE"]/td[position()=5]/text()').getall()
            Item['name'] = names[1]
            Item['gebDatum'] = bday[1][0:10]
            Item['aktenzeichen'] = pass_number[1]
            Item['antragNr'] = order_number[1]
            Item['prufung'] = exam_name[0:2]
            Item['prufungsdatum'] = exam_date[0:2]
            Item['Zahlung'] = exam_pay[0:2]
            Item['Ergebnis'] = exam_result[0:2]
            yield Item
  • Вопрос задан
  • 135 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы