WedX - журнал о программировании и компьютерных науках

Веб-скрейпинг Python: вывод в csv

Я делаю некоторые успехи в очистке веб-страниц, однако мне все еще нужна помощь для выполнения некоторых операций:

import requests
import pandas as pd
from bs4 import BeautifulSoup




url = 'https://fcf.cat/equip/1920/1i/sant-ildefons-ue-b'

# soup = BeautifulSoup(requests.get(converturl).content, 'html.parser')

soup = BeautifulSoup(requests.get(url).content, 'html.parser')

out = []

for tr in soup.select('.col-md-4 tbody tr'):

В классе col-md-4 я знаю, что есть 3 таблицы, которые я хочу создать в формате csv, который в качестве вывода имеет три значения: имя, фамилию и для последнего значения я хочу имя заголовка таблицы.

имя, фамилия, таблица заголовков

Любая помощь будет оценена по достоинству.


  • Посмотрите, если эта помощь, stackoverflow.com/questions/39710903/ 01.06.2020
  • Спасибо за ссылку, но это использует pandas, и я хотел бы использовать BeautifulSoup. 01.06.2020

Ответы:


1

Это то, что я сделал самостоятельно:

import requests
import pandas as pd
from bs4 import BeautifulSoup





url = 'https://fcf.cat/equip/1920/1i/sant-ildefons-ue-b'


soup = BeautifulSoup(requests.get(url).content, 'html.parser')

filename = url.rsplit('/', 1)[1] + '.csv'


tables = soup.select('.col-md-4 table')
rows = []

for tr in tables:
    t = tr.get_text(strip=True, separator='|').split('|')
    rows.append(t)
    df = pd.DataFrame(rows)
    print(df)
    df.to_csv(filename)

Спасибо,

01.06.2020

2

Это может сработать:

import requests
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://fcf.cat/equip/1920/1i/sant-ildefons-ue-b'
soup = BeautifulSoup(requests.get(url).content, 'html.parser')
tables = soup.select('.col-md-4 table')
rows = []

for table in tables:
    cleaned = list(table.stripped_strings)
    header, names = cleaned[0], cleaned[1:]
    data = [name.split(', ') + [header] for name in names]
    rows.extend(data)

result = pd.DataFrame.from_records(rows, columns=['surname', 'name', 'table'])
01.06.2020
  • Спасибо за помощь. Я вставил код в визуальную студию, но у меня ошибка SyntaxError: «возврат» вне функции 01.06.2020
  • Я отредактировал ответ, вы получите желаемый результат в переменной result. 01.06.2020
  • Привет, Милан, я ценю вашу поддержку, я снова попробовал код, и у меня все еще есть проблема. Произошло исключение: объект «генератор» TypeError не подлежит подписке Файл plantillasfcf.py, строка 30, в заголовке ‹module›, имена = очищенный [0], очищенный [1:] 01.06.2020
  • Извини. Я отредактировал ответ - вывод stripped_strings должен быть заключен в list. Попробуйте еще раз? 01.06.2020

  • 3

    Вам нужно сначала выполнить итерацию по каждой таблице, которую вы хотите очистить, а затем для каждой таблицы получить ее заголовок и строки данных. Для каждой строки данных вы хотите проанализировать имя и фамилию (вместе с заголовком таблицы).

    Вот подробный рабочий пример:

    import requests
    import pandas as pd
    from bs4 import BeautifulSoup
    
    url = 'https://fcf.cat/equip/1920/1i/sant-ildefons-ue-b'
    
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    
    out = []
    
    # Iterate through each of the three tables
    for table in soup.select(".col-md-4 table"):
    
        # Grab the header and rows from the table
        header = table.select("thead th")[0].text.strip()
        rows = [s.text.strip() for s in table.select("tbody tr")]
    
        t = []  # This list will contain the rows of data for this table
    
        # Iterate through rows in this table
        for row in rows:
    
            # Split by comma (last_name, first_name)
            split = row.split(",")
    
            last_name = split[0].strip()
            first_name = split[1].strip()
    
            # Create the row of data
            t.append([first_name, last_name, header])
    
        # Convert list of rows to a DataFrame
        df = pd.DataFrame(t, columns=["first_name", "last_name", "table_name"])
    
        # Append to list of DataFrames
        out.append(df)
    
    # Write to CSVs...
    out[0].to_csv("first_table.csv", index=None)  # etc...
    

    Всякий раз, когда вы парсите веб-страницы, я настоятельно рекомендую использовать strip() для всего текста, который вы анализируете, чтобы убедиться, что в ваших данных нет лишних пробелов.

    Надеюсь, это поможет!

    01.06.2020
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]