Python преобразует bs4.элемент.Тег (таблица html) в фрейм данных pandas

#python #pandas #beautifulsoup

Вопрос:

Мы хотим очистить таблицу со следующего веб-сайта:

 from bs4 import BeautifulSoup  import requests import pandas as pd  base_url = "https://www.riaa.com/gold-platinum/#" headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36' } response = requests.get(base_url, headers=headers) web_page = response.text soup = BeautifulSoup(web_page, "html.parser") main_table = soup.find("table")  

type(main_table) есть bs4.element.Tag , и мы изо всех сил пытаемся преобразовать это в фрейм данных pandas. Мы можем очистить панд, чтобы получить стол именно так, как нам нужно, но мы не знаем, как это сделать в первую очередь для панд. Возможно ли это? Правильно ли мы с самого начала хватаемся за стол?

Ответ №1:

Вы можете сделать это только с помощью панд и запросов следующим образом:

Код:

 import requests import pandas as pd  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'}  url = "https://www.riaa.com/gold-platinum/#"  req = requests.get(url,headers=headers)  wiki_table = pd.read_html(req.text, attrs = {"class":"table-responsive"} )  df = wiki_table[0]#.to_csv('score.csv',index = False)  print(df)  

Выход:

 Award ... Unnamed: 6 0 SHARE ... CODY JOHNSON Title: AIN'T NOTHIN' TO IT Cert... 1 SHARE ... CARRIE UNDERWOOD Title: BEFORE HE CHEATS Cer... 2 SHARE ... CARRIE UNDERWOOD Title: SOME HEARTS Certific... 3 SHARE ... CORDAE Title: BROKE AS FUCK Certification Da... 4 SHARE ... RL GRIME Title: UCLA (FEAT. 24HRS) Certifica... 5 SHARE ... VICTOR MANUELLE amp; LA INDIA Title: VÍCTIMAS LA... 6 SHARE ... YOUNGBOY NEVER BROKE AGAIN Title: DRUG ADDICT... 7 SHARE ... YOUNGBOY NEVER BROKE AGAIN Title: ALL IN Cer... 8 SHARE ... YOUNGBOY NEVER BROKE AGAIN Title: MY WINDOW ... 9 SHARE ... YOUNGBOY NEVER BROKE AGAIN Title: HOUSE ARRES... 10 SHARE ... A$AP FERG Title: WORK REMIX (FEAT. A$AP ROCKY... 11 SHARE ... A$AP FERG Title: SHABBA (FEAT. A$AP ROCKY) C... 12 SHARE ... A$AP FERG Title: NEW LEVEL (FEAT. FUTURE) Ce... 13 SHARE ... A$AP FERG Title: PLAIN JANE Certification Da... 14 SHARE ... COBRA STARSHIP Title: HOT MESS Certification... 15 SHARE ... DMX Title: SLIPPIN' Certification Date: Octo... 16 SHARE ... ELLA MAI Title: ELLA MAI Certification Date:... 17 SHARE ... HARRY STYLES Title: WATERMELON SUGAR Certifi... 18 SHARE ... HERENCIA DE PATRONES Title: COSAS DE LA CLICA... 19 SHARE ... HERENCIA DE PATRONES Title: PA LAS VIBRAS Ce... 20 SHARE ... JIMMY HUMILDE Title: JIMMY HUMILDE PRESENTA L... 21 SHARE ... JOWELL amp; RANDY Title: LOS MAS SUELTOS DEL REG... 22 SHARE ... MY CHEMICAL ROMANCE Title: WELCOME TO THE BLA... 23 SHARE ... MY CHEMICAL ROMANCE Title: MAMA Certificatio... 24 SHARE ... MY CHEMICAL ROMANCE Title: I DON'T LOVE YOU ... 25 SHARE ... MY CHEMICAL ROMANCE Title: DEAD! Certificati... 26 SHARE ... MY CHEMICAL ROMANCE Title: CANCER Certificat... 27 SHARE ... MY CHEMICAL ROMANCE Title: FAMOUS LAST WORDS ... 28 SHARE ... MY CHEMICAL ROMANCE Title: TEENAGERS Certifi... 29 SHARE ... NATANAEL CANO Title: CORRIDOS TUMABDOS Certi...  [30 rows x 7 columns]  

Комментарии:

1. Спасибо, это здорово. Похоже, что большую часть веб-очистки python можно выполнить без beautifulsoup…

2. это полезно, однако это возвращает только текст таблицы. мне было бы полезно получить доступ к некоторым другим элементам таблицы (например, к ссылке на изображение в первом столбце, а не к слову «ПОДЕЛИТЬСЯ»).

3. @Canovice да , ваше мышление верно . панды могут возвращать табличный текст, что означает, что Панды могут захватывать только табличные данные из html-dom и не могут захватывать ссылку. Спасибо