#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 и не могут захватывать ссылку. Спасибо