Python + Selenium Web Scraping Dynami c Элементы - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь извлечь следующую информацию с веб-сайта архива SE C.

1) Большой ускоренный файлер 2) Ускоренный файлер 3) Неускоренный файлер 4) Меньшая компания, предоставляющая отчеты 5) Новые Рост компании

Вот как это выглядит на сайте:

Large accelerated filer     ☒       
Accelerated filer           ☐
Non-accelerated filer       ☐  (Do not check if a smaller reporting company)         
Smaller reporting company   ☐
Emerging growth company     ☐

В некоторых случаях один или несколько элементов могут отсутствовать. Я хочу написать обобщенный код c, который может извлечь эти значения для ряда компаний. Теперь проблема, с которой я сталкиваюсь, заключается в том, что структура HTML меняется от компании к компании. До сих пор я сталкивался с 3 различными структурами (см. Ниже структуру HTML). Как мне написать код для обобщения различных структур?

<td valign="bottom">Large&nbsp;accelerated&nbsp;filer</td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom">☒</td>
<td valign="bottom">&nbsp;&nbsp;</td>
<td valign="bottom">Accelerated&nbsp;filer</td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom">☐</td></tr>
<tr style="page-break-inside:avoid ; font-family:Times New Roman; font-size:10pt">
<td valign="bottom"><font style="white-space:nowrap">Non-accelerated&nbsp;filer</font></td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom">☐&nbsp;&nbsp;(Do not check if a smaller reporting company)</td>
<td valign="bottom">&nbsp;&nbsp;</td>
<td valign="bottom">Smaller&nbsp;reporting&nbsp;company</td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom">☐</td></tr>
<tr style="page-break-inside:avoid ; font-family:Times New Roman; font-size:10pt">
<td valign="bottom">Emerging&nbsp;growth&nbsp;company</td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom">☐</td>
<td valign="bottom">&nbsp;&nbsp;</td>
<td valign="bottom"></td>
<td valign="bottom">&nbsp;</td>
<td valign="bottom"></td></tr>

Другая структура:

filer&nbsp;&nbsp;<font style="FONT-FAMILY:WINGDINGS">x</font>&nbsp;&nbsp;&nbsp;&nbsp;Accelerated filer&nbsp;&nbsp;<font style="FONT-FAMILY:WINGDINGS">¨</font>&nbsp;&nbsp;&nbsp;&nbsp;Non-accelerated filer&nbsp;&nbsp;<font style="FONT-FAMILY:WINGDINGS">¨</font>&nbsp;&nbsp;&nbsp;&nbsp;Smaller reporting company&nbsp;&nbsp;<font style="FONT-FAMILY:WINGDINGS">¨</font> </font>

Другая структура:

<tbody><tr>
<td width="63%"></td>
<td valign="bottom" width="2%"></td>
<td width="35%"></td></tr>
<tr>
<td valign="top"> <p style="text-indent:2.00em"><font face="Times New Roman" size="2">Large accelerated filer&nbsp;&nbsp;<font face="WINGDINGS">¨</font></font></p></td>
<td valign="bottom"><font size="1">&nbsp;&nbsp;</font></td>
<td valign="bottom"><font face="Times New Roman" size="2">Accelerated filer&nbsp;&nbsp;<font face="WINGDINGS">þ</font></font></td></tr>
<tr>
<td valign="top"> <p style="text-indent:2.00em"><font face="Times New Roman" size="2">Non-accelerated filer&nbsp;&nbsp;<font face="WINGDINGS">¨</font>&nbsp;&nbsp; (Do not check if a smaller reporting company)</font></p></td>
<td valign="bottom"><font size="1">&nbsp;&nbsp;</font></td>
<td valign="bottom"><font face="Times New Roman" size="2">Smaller reporting Company&nbsp;&nbsp;<font face="WINGDINGS">¨</font></font></td></tr>
</tbody>

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете попробовать эту комбинацию (| оператор) из 3 XPaths, чтобы получить то, что вам нужно (пункты, которые были отмечены галочкой):

//td[.="☒"]/preceding::td[string-length(.)>1][1]/text()|//font[.="x"]/following::text()[1]|//font[.="þ"]/preceding::text()[1]

Предоставленная вами html не является правильно сформированной. Если это не работает, пожалуйста, предоставьте что-нибудь еще.

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