Рубрики
Без рубрики

Извлечение данных из Transfermarkt: введение в патрон

Это переведенная версия моего учебника Originaly, опубликованная на бразильском португальском языке. Репозиторий … с меткой Python, новичков, сетью, BeautifulSoup.

Это переведенная версия мой учебник Оригинал опубликован на бразильском португальском языке. Репозиторий с кодом этого учебника находится в моем Gitlab Profile Анкет

Получение данных и преобразование их в информацию является основой таких областей, как наука данных. Иногда получить его очень просто, например, вы можете, прямо сейчас посетить веб -сайт правительства Бразилии data.gov.br и получить доступ к нескольким необработанным файлам данных от правительства, а затем выполните анализ файла .csv (формат файла, который передает данные) простым, простым и быстрым способом.

Однако в некоторых ситуациях данные несколько трудно получить, например, вам может потребоваться получить данные, которые доступны только на веб -странице для проведения анализа. В этой ситуации вы можете использовать Красивый суп , a Python Библиотека, чтобы выполнить Интернет -соскабливание Анкет

Beautiful Soup – самая популярная библиотека Python для получения веб -данных, он способен извлекать данные из файлов HTML и XML, в нем есть несколько методов, которые делают поиск конкретных данных на веб -страницах довольно простыми.

Для этого урока мы извлеките данные с веб -сайта Transfermarkt Это веб -платформа, в котором содержатся новости и данные об играх, переводах, клубах и игроках из футбольного/футбольного мира.

Transfermarkt Home страница

Мы получим название, страну предыдущей лиги и цену 25 самых дорогих игроков в истории клуба AFC Ajax, эту информацию можно найти в Transfermarkt Page Анкет

Страница, которая содержит информацию о 25 крупнейших знаках AFC AJAX

Извлечение данных

Прежде чем получить сами данные, мы будем импортировать библиотеки, необходимые для выполнения программы, это будет: Красивый суп , Панды и Запросы Анкет

import requests
from bs4 import BeautifulSoup
import pandas as pd

После этого мы скачаем веб -страницу в нашей программе, используя Запросы Библиотека, которая запрашивает информацию со страницы, и библиотеку BeautifulSoup, которая преобразует данные, полученные в запросах (ответ BeautifulSoup объект, который будет использоваться при извлечении данных.

"""
To make the request to the page we have to inform the
website that we are a browser and that is why we
use the headers variable
"""
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

# endereco_da_pagina stands for the data page address
endereco_da_pagina = "https://www.transfermarkt.co.uk/ajax-amsterdam/transferrekorde/verein/610/saison_id//pos//detailpos/0/w_s//altersklasse//plus/1"

# In the objeto_response variable we will the download of the web page
objeto_response = requests.get(endereco_da_pagina, headers=headers)

"""
Now we will create a BeautifulSoup object from our object_response.
The 'html.parser' parameter represents which parser we will use when creating our object,
a parser is a software responsible for converting an entry to a data structure.
"""
pagina_bs = BeautifulSoup(objeto_response.content, 'html.parser')

pagina_bs теперь является переменной, которая содержит все контент HTML на нашей странице данных.

Теперь давайте извлеките данные, которые находятся в нашей переменной, обратите внимание, что необходимая информация находится в таблице. Каждая строка в этой таблице представляет игрока с его именем, представленным в HTML якорем ( ) с классом “spielprofil_tooltip”, Страна Лиги происхождения, представленная как изображение флага ( ) с классом “flaggenrahmen” в седьмом столбце ( ) из каждой строки и стоимость, представленная табличной ячейкой ( ) класса “rechts hauptlink”

Затем мы получим эти данные, используя библиотеку BeautifulSoup.

Сначала мы получим имена игроков.

nomes_jogadores = [] # List that will receive all the players names

# The find_all () method is able to return all tags that meet restrictions within parentheses
tags_jogadores = pagina_bs.find_all("a", {"class": "spielprofil_tooltip"})
# In our case, we are finding all anchors with the class "spielprofil_tooltip"

# Now we will get only the names of all players
for tag_jogador in tags_jogadores:
    nomes_jogadores.append(tag_jogador.text)

Теперь мы получим страны предыдущих лиг игроков.

pais_jogadores = [] # List that will receive all the names of the countries of the players's previous leagues.

tags_ligas = pagina_bs.find_all("td",{"class": None})
# Now we will receive all the cells in the table that have no class atribute set

for tag_liga in tags_ligas:
    # The find() function will find the first image whose class is "flaggenrahmen" and has a title
    imagem_pais = tag_liga.find("img", {"class": "flaggenrahmen"}, {"title":True})
    # The country_image variable will be a structure with all the image information,
    # one of them is the title that contains the name of the country of the flag image
    if(imagem_pais != None): # We will test if we have found any matches than add them
        pais_jogadores.append(imagem_pais['title'])

Наконец, мы получим цены игроков.

custos_jogadores = []

tags_custos = pagina_bs.find_all("td", {"class": "rechts hauptlink"})

for tag_custo in tags_custos:
    texto_preco = tag_custo.text
    # The price text contains characters that we don't need like £ (euros) and m (million) so we'll remove them
    texto_preco = texto_preco.replace("£", "").replace("m","")
    # We will now convert the value to a numeric variable (float)
    preco_numerico = float(texto_preco)
    custos_jogadores.append(preco_numerico)

Теперь, когда у нас есть все данные, которые мы хотели, давайте сделаем это понятным, чтобы улучшить любой анализ, который мы хотим сделать. Для этого мы будем использовать библиотеку Pandas и ее DataFrame Класс, который представляет собой класс, который представляет табличную структуру данных, то есть он похож на общую таблицу.

# Creating a DataFrame with our data
df = pd.DataFrame({"Jogador":nomes_jogadores,"Preço (milhão de euro)":custos_jogadores,"País de Origem":pais_jogadores})

# Printing our gathered data
print(df)

Теперь мы можем увидеть все наши данные, полученные с помощью Интернет -соскабливание Организовано в DataFrame!

Я надеюсь, что я помог каким -либо образом, и если у вас есть какие -либо проблемы или вопросы, не стесняйтесь оставить комментарий к этому сообщению или отправить электронная почта мне ;).

Оригинал: “https://dev.to/lisandramelo/extracting-data-from-transfermarkt-an-introduction-to-webscraping-2i1c”