Чтение файла CSV с помощью BeautifulSoup - PullRequest
0 голосов
/ 13 марта 2020

После очистки информации на веб-сайте мне удалось сохранить файл с необработанным кодом в формате html, поскольку я не нашел решения для find_all текста в списке списков.

Теперь у меня есть данные, но я не могу получить текст, потому что bs4 не распознает список форматов. Вот мой открытый код:

with open('/my_file.csv', 'r') as read_obj:
    csv_reader = reader(read_obj)
    list_of_rows = list(csv_reader)
    print(list_of_rows)

Это формат списка:

[['', '0', '1', '2', '3'], ['0','<span class="item">Red <small>col.</small></span>',
  '<span class="item">120 <small>cc.</small></span>',
  '<span class="item">Available <small>in four days</small></span>',
  '<span class="item"><small class="txt-highlight-red">15 min</small></span>'],
 ['1', '<span class="item">Blue <small>col.</small></span>',
  '<span class="item">200 <small>cc.</small></span>',
  '<span class="item">Available <small>in a week</small></span>',
  '<span class="item">04 mar <small></small></span>'],
 ['0', '<span class="item">Green <small>col.</small></span>',
  '<span class="item">Available <small>immediately</small></span>',
  '<span class="item"><small class="txt-highlight-red">2 hours</small></span>']]

Есть ли способ прочитать csv файлы в BeautifulSoup и затем проанализировать его?

Цель задачи - сохранить только текст, исключив все цифры между '<>' (<> символы включены).

1 Ответ

1 голос
/ 13 марта 2020

Вы можете создать функцию, которая будет применять объект Beautifulsoup и возвращать текст. если нет тегов / содержимого для анализа, он просто останется как есть.

Кроме того, я бы предпочел просто использовать pandas для чтения в этом CSV.

import pandas as pd
from bs4 import BeautifulSoup

df = pd.read_csv('/my_file.csv')

def foo_bar(x):
    try:
        return BeautifulSoup(x, 'lxml').text
    except:
        return x

print ('Parsing html in table...')
df = df.applymap(foo_bar)

Пример ввода:

df = pd.DataFrame([['0','<span class="item">Red <small>col.</small></span>',
  '<span class="item">120 <small>cc.</small></span>',
  '<span class="item">Available <small>in four days</small></span>',
  '<span class="item"><small class="txt-highlight-red">15 min</small></span>'],
 ['1', '<span class="item">Blue <small>col.</small></span>',
  '<span class="item">200 <small>cc.</small></span>',
  '<span class="item">Available <small>in a week</small></span>',
  '<span class="item">04 mar <small></small></span>'],
 ['0', '<span class="item">Green <small>col.</small></span>',
  '<span class="item">Available <small>immediately</small></span>',
  '<span class="item"><small class="txt-highlight-red">2 hours</small></span>']], columns = ['', '0', '1', '2', '3'])

Исходная таблица:

print (df.to_string())
                                                      0                                                  1                                                  2                                                  3
0  0  <span class="item">Red <small>col.</small></span>   <span class="item">120 <small>cc.</small></span>  <span class="item">Available <small>in four da...  <span class="item"><small class="txt-highlight...
1  1  <span class="item">Blue <small>col.</small></s...   <span class="item">200 <small>cc.</small></span>  <span class="item">Available <small>in a week<...   <span class="item">04 mar <small></small></span>
2  0  <span class="item">Green <small>col.</small></...  <span class="item">Available <small>immediatel...  <span class="item"><small class="txt-highlight...                                               None

Вывод:

print (df.to_string())
               0                      1                       2        3
0  0    Red col.                120 cc.  Available in four days   15 min
1  1   Blue col.                200 cc.     Available in a week  04 mar 
2  0  Green col.  Available immediately                 2 hours     None
...