За последние 24 часа нас посетили 21804 программиста и 1067 роботов. Сейчас ищут 714 программистов ...

Парсинг таблиц

Тема в разделе "Сделайте за меня", создана пользователем DenisVM, 21 апр 2017.

  1. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Хочу написать код для выбора электродвигателя по параметрам (это могут быть как размеры вала, посадочного места, так допустим скорость вращения, мощность и т.д.). Но это не имеет значения.
    Просто при реализации столкнулся с тем, что для этого мне нужно создать базу данных, которая в свою очередь будет состоять из данных которые я должен получить из десятка таблиц.
    В свою очередь, таблицы разные: с различными величинами и количеством столбцов. Поэтому, я ничего лучше не могу придумать, как каждый раз изменять руками количество значений вносимых в таблицу MySql в коде:


    PHP:
    1. <?php
    2. require_once 'phpQuery.php';
    3. $link = mysqli_connect('localhost:3306', 'root', '', 'motor');
    4. $str = file_get_contents('tab.html');
    5.     $pq = phpQuery::newDocument($str);
    6.     $links = $pq->find('td');
    7.     $i=0;
    8.     foreach ($links as $l) {
    9.  
    10.        $pqLink = pq($l); //pq делает объект phpQuery
    11.        $s = $pqLink->text();
    12.        if ($i==10) {
    13.       mysqli_query($link, "insert into motor5 (`1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`) values('$a', '$b','$c','$d','$e','$f','$g','$h','$j','$k')");
    14.        $i=0;
    15.        }
    16.        if ($i==0) $a=$s;
    17.        if ($i==1) $b=$s;
    18.        if ($i==2) $c=$s;
    19.        if ($i==3) $d=$s;
    20.        if ($i==4) $e=$s;
    21.        if ($i==5) $f=$s;
    22.        if ($i==6) $g=$s;
    23.        if ($i==7) $h=$s;
    24.        if ($i==8) $j=$s;
    25.        if ($i==9) $k=$s;
    26.  
    27.        $i++;
    28.     }
    29. ?>
    Народ извините за корявый код. Кто что посоветует- может есть бесплатные готовые решения для парсинга и вноса в базу данных таблиц? Может можно как-то улучшить код?
    С радостью прийму любой коментарий.
    Ах да, если что, я использовал фреймворк phpQuery для парсинга.
     
    #1 DenisVM, 21 апр 2017
    Последнее редактирование модератором: 21 апр 2017
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    давай с самого начала.
    Код для выбора электродвигателей - это фильтры в интернет магазине?
    Из десятка таблиц - что за таблицы? эксель?

    Развернуто, что хочешь сделать и что для этого есть, кроме кода.
     
  3. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    --- Добавлено ---
    1.Нет это не интернет маназин, просто форма в которую вводишь известные тебе параметры, а на выходе получаешь список подходящих электродвигателей.
    2.Таблицы- html код из различных справочных статей.
    3.Короче на входе html, на выходе- текст ячеек записанный в базу данных.
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    т е парсинг с внешних ресурсов?
     
  5. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Совершенно верно. Прийду домой вечером, набросаю пример html таблицы, пример формы для заполнения, чтоб нагдяднее было
     
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    У нас модераторы бьют по рукам за такое.
     
    alexblack нравится это.
  7. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    В чем заключается кража контента? Таблицы совершенно одинаковые на всех сайтах. Это справочная литература. Просто html формат общедоступен, а допустим из pdf я не знаю как вычленить текст, значения и внести в базу данных (только руками)
     
  8. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Народ конкретизирую задачу, если кого заинтересует. Вот две таблицы:

    upload_2017-4-22_18-27-20.png

    upload_2017-4-22_18-27-52.png

    У них различное количество столбцов и различные значения в столбцах. Код таблиц:

    HTML:
    1. <!DOCTYPE html>
    2. <html lang="en">
    3.   <meta charset="UTF-8">
    4.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    5.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
    6.   <title>Document</title>
    7. </head>
    8.   <style>
    9.   table, td {
    10.   border: 1px solid black;
    11.   border-collapse: collapse;
    12.   }
    13.  
    14.   </style>
    15.   <table class="table1" >
    16.     <tr>
    17.     <td colspan="2">Марка двигателя</td>
    18.     <td>Мощн <br>кВт</td>
    19.     <td>Скольж<br>%&nbsp;</td>
    20.     <td>КПД<br>%&nbsp;</td>
    21.     <td>Коэф. <br>мощн</td>
    22.     <td>Ммакс/<br>&nbsp;</td>
    23.     <td>Мп/<br>Мн</td>
    24.     <td>Ммин/<br>Мн&nbsp;</td>
    25.     <td>Iп/<br></td>
    26.     </tr>
    27.   <tr>
    28.   <td>4АА56А2 У3&nbsp;</td>
    29.   <td>4ААМ56А2</td>
    30.   <td>0,18</td>
    31.   <td>8</td>
    32.   <td>66</td>
    33.   <td>0,76</td>
    34.   <td>2,2</td>
    35.   <td>2</td>
    36.   <td>1,2</td>
    37.   <td>5</td>
    38.   </tr>
    39.   <tr>
    40.   <td>4АА56В2 У3&nbsp;</td>
    41.   <td>4ААМ56В2&nbsp;</td>
    42.   <td>0,25</td>
    43.   <td>8</td>
    44.   <td>68</td>
    45.   <td>0,77</td>
    46.   <td>2,2</td>
    47.   <td>2</td>
    48.   <td>1,2</td>
    49.   <td>5</td>
    50.   </tr>
    51.   <tr>
    52.   <td>4А63А2 У3&nbsp;</td>
    53.   <td>4АМ63А2&nbsp;&nbsp;</td>
    54.   <td>0,37</td>
    55.   <td>8,3</td>
    56.   <td>70</td>
    57.   <td>0,86</td>
    58.   <td>2,2</td>
    59.   <td>2</td>
    60.   <td>1,2</td>
    61.   <td>5</td>
    62.   </tr>
    63.   <tr>
    64.   <td>4А63В2 У3&nbsp;</td>
    65.   <td>4АМ63В2&nbsp;&nbsp;</td>
    66.   <td>0,55</td>
    67.   <td>8,5</td>
    68.   <td>73</td>
    69.   <td>0,86</td>
    70.   <td>2,2</td>
    71.   <td>2</td>
    72.   <td>1,2</td>
    73.   <td>5</td>
    74.   </tr>
    75.  
    76.   </table>
    77.  
    78. </body>
    79. </html>
    80.  
    81. B 2-я:
    82.  
    83. <!DOCTYPE html>
    84. <html lang="en">
    85.   <meta charset="UTF-8">
    86.   <meta name="viewport" content="width=`device-width`, initial-scale=1.0">
    87.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
    88.   <title>Document</title>
    89. </head>
    90. table, td {
    91. border: 1px solid black;
    92. border-collapse: collapse;
    93. }
    94.  
    95.   <table>
    96. <tr>
    97. <td colspan="2" rowspan="2">Марка двигателя</td>
    98. <td rowspan="2">Число <br>полюсов</td>
    99. <td colspan="4">Габаритные <br>размеры, мм&nbsp;</td>
    100. <td colspan="7">Установочные и присоединительные <br>размеры, мм&nbsp;</td>
    101. <td rowspan="2">Масса, кг</td>
    102. </tr>
    103. <tr>
    104. <td>l30</td>
    105. <td>h31&nbsp;</td>
    106. <td>d30</td>
    107. <td>b31</td>
    108. <td>l1&nbsp;</td>
    109. <td>l10</td>
    110. <td>l31</td>
    111. <td>d1</td>
    112. <td>d10</td>
    113. <td>b10</td>
    114. <td>h&nbsp;</td>
    115. </tr>
    116. <tr>
    117. <td>4АА50&nbsp;</td>
    118. <td>4ААМ50&nbsp;</td>
    119. <td>2, 4</td>
    120. <td>176</td>
    121. <td>142</td>
    122. <td>112</td>
    123. <td>&nbsp;</td>
    124. <td>20</td>
    125. <td>63</td>
    126. <td>32</td>
    127. <td>9</td>
    128. <td>5,8</td>
    129. <td>80</td>
    130. <td>50</td>
    131. <td>3,3/3</td>
    132. </tr>
    133. <tr>
    134. <td>4АА56&nbsp;</td>
    135. <td>4ААМ56&nbsp;</td>
    136. <td>2, 4&nbsp;</td>
    137. <td>194</td>
    138. <td>152</td>
    139. <td>128</td>
    140. <td>&nbsp;</td>
    141. <td>23</td>
    142. <td>71</td>
    143. <td>36</td>
    144. <td>11</td>
    145. <td>5,8</td>
    146. <td>90</td>
    147. <td>56</td>
    148. <td>4,5/4,3</td>
    149. </tr>
    150. <tr>
    151. <td>4АА63&nbsp;</td>
    152. <td>4ААМ63&nbsp;</td>
    153. <td>2, 4, 6&nbsp;</td>
    154. <td>216</td>
    155. <td>164</td>
    156. <td>138</td>
    157. <td>&nbsp;</td>
    158. <td>30</td>
    159. <td>80</td>
    160. <td>40</td>
    161. <td>14</td>
    162. <td>7</td>
    163. <td>100</td>
    164. <td>63</td>
    165. <td>6,3/6,1</td>
    166. </tr>
    167. <tr>
    168. <td>4А 71&nbsp;</td>
    169. <td>4АМ 71&nbsp;</td>
    170. <td>2, 4, 6, 8&nbsp;</td>
    171. <td>285</td>
    172. <td>201</td>
    173. <td>170</td>
    174. <td>&nbsp;</td>
    175. <td>40</td>
    176. <td>90</td>
    177. <td>45</td>
    178. <td>19</td>
    179. <td>7</td>
    180. <td>112</td>
    181. <td>71</td>
    182. <td>15,1/14</td>
    183. </tr>
    184.  
    185. </body>
    186. </html>
    Как их попроще отпарсить?
     
    #8 DenisVM, 22 апр 2017
    Последнее редактирование модератором: 22 апр 2017
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Это справочная литература, но кто-то ее вбивал себе на сайт. И имеет с этого трафик.
     
  11. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Понятно. А почему html файлы нельзя грузить к комментам? Из-за того что может быть редирект?
     
  12. DenisVM

    DenisVM Новичок

    С нами с:
    20 апр 2017
    Сообщения:
    8
    Симпатии:
    0
    Написал парсер- кривой, но работает. Вечером выложу.