Python Bs4: как получить строку в таблице на основе определенного значения 'td' этой строки - PullRequest
0 голосов
/ 14 мая 2019

Если у меня есть страница веб-сайта с несколькими таблицами, и я хочу получить исходный код для конкретной строки из определенной таблицы на основе ключевого слова в beautifulsoup4, как я могу это сделать, используя find или * 1002? * методы (или любые другие методы в этом отношении) enter image description here

Используя приведенную выше таблицу, допустим, что я хочу получить строку, содержащую ключевое слово "ROW 1" (или "A", "B", "C" и т. Д.) и только эту строку как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Приведенный ниже пример, но с bs4 4.7.1 вы можете использовать псевдоклассы css-селекторов :has и :contains, чтобы указать шаблон tr (строка) что имеет td (ячейка таблицы), которая содержит 'искомая фраза' . Идентификатор таблицы также передается для нацеливания на правильную таблицу (здесь идентификатор для упрощения). select вернет все соответствующие tr элементы; используйте select_one, если требуется только первое совпадение.

soup.select('#example tr:has(> td:contains("Row 1"))')

1020 * р *

from bs4 import BeautifulSoup as bs

html = '''
<table id="example">
  <tbody><tr>
    <th>Col1</th>
    <th>Col2</th>
    <th>Col3</th>
  </tr>
  <tr>
    <td>Row 1</td>
    <td>A</td>
    <td>B</td>
  </tr>
  <tr>
    <td>Row 2</td>
    <td>C</td>
    <td>D</td>
  </tr>
</tbody></table>
<table id="example2">
  <tbody><tr>
    <th>Col1</th>
    <th>Col2</th>
    <th>Col3</th>
  </tr>
  <tr>
    <td>Not Row 1</td>
    <td>A</td>
    <td>B</td>
  </tr>
  <tr>
    <td>Not Row 2</td>
    <td>C</td>
    <td>D</td>
  </tr>
</tbody></table>

'''

soup = bs(html, 'lxml') #'html.parser'
soup.select('#example tr:has(> td:contains("Row 1"))')
0 голосов
/ 14 мая 2019

Соберите весь html с пандами и сделайте следующее (этот код не проверен)

import pandas as pd

html_table = 'From your web scrapping'
df = pd.read_html(io=html_table)
df.loc[1]  # Will give you all the information for the first row

Я бы предложил потратить 10 минут на изучение панд, которые действительно помогут.https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html

...