Это переведенная версия мой учебник Оригинал опубликован на бразильском португальском языке. Репозиторий с кодом этого учебника находится в моем 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”