Разбор w / чувствительный к регистру текст / теги - PullRequest
0 голосов
/ 16 июня 2019

Я анализирую текст с помощью Beautifulsoup и хочу вернуть теги ниже / ниже родительского тега. Однако между тремя различными документами существуют несоответствия между тем, как «требуемый набор данных» пишется с большой буквы. Смотрите ниже:

<td class="pl "...-unimportant bits of script here-...;>Desired Data Set...</td>

и

<td class="pl "...-unimportant bits of script here-...;>Desired data set...</td>

и

<td class="pl "...-unimportant bits of script here-...;>desired data set...</td>

Это мой код:

import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(data.text, 'lxml')

filenames = ['Desired Data Set','desired data set','Desired data set']

for filename in filenames:
    for item in soup.select('filename:contains("' + filename + '")'):
                    for td in item.find('td', text=filename).parent.find_all('td'):
                        data = [td.text.strip()]
                        print(data) 

... и это работает.

Однако, когда я начну работать с большими наборами данных, я уверен, что будет еще больше несоответствий, и даже несмотря на то, что вышеупомянутый подход работает, он «хакерский» и не эффективен или разумен. Я хотел бы просто использовать одно имя файла для всех желаемых наборов данных.

Я пытался опустить весь суп, используя lower (), но он выдает ошибку NoneType.

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

soup = BeautifulSoup(data.text.lower(), 'lxml') может быть «хакерским» способом решения проблемы, но для моего конкретного примера это сработало.

0 голосов
/ 16 июня 2019

Вы можете использовать string аргумент метода find_all():

from bs4 import BeautifulSoup

data = '''<table><tr><td class="pl ">Desired Data Set...</td>
<td class="pl ">Desired data set...</td>
<td class="pl ">desired data set...</td>
<td class="pl ">Something else</td>
</tr></table>
'''

soup = BeautifulSoup(data, 'lxml')

for td in soup.find_all('td', string=lambda t: 'desired data set' in t.lower()):
    print(td)

Печать:

<td class="pl">Desired Data Set...</td>
<td class="pl">Desired data set...</td>
<td class="pl">desired data set...</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...