Красивый стол для скрапа с перерывами на стол - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь очистить таблицу в кадре данных. Моя попытка возвращает только имя таблицы, а не данные в строках для каждого региона.

Вот что у меня есть:

from bs4 import BeautifulSoup as bs4
import requests

url = 'https://www.eia.gov/todayinenergy/prices.php'
r = requests.get(url)
soup = bs4(r.text, "html.parser")

table_regions = soup.find('table', {'class': "t4"})
regions = table_regions.find_all('tr')

for row in regions:
    print row

идеальный результат, который я хотел бы получить:

region         | price   
---------------|-------
new england    | 2.59
new york city  | 2.52

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 11 сентября 2018

Если вы проверите свой html-ответ (суп), вы увидите, что тег таблицы, который вы получаете в этой строке table_regions = soup.find('table', {'class': "t4"}), закрывается перед строками, которые содержат необходимую вам информацию (те, которые содержат тд с именами классов). : вверх дн d1 и s1. Так как насчет использования сырых тд тегов, таких как:

from bs4 import BeautifulSoup as bs4
import requests
import pandas as pd

url = 'https://www.eia.gov/todayinenergy/prices.php'
r = requests.get(url)
soup = bs4(r.text, "html.parser")

a = soup.find_all('tr')
rows = []
subel = []

for tr in a[42:50]:
    b = tr.find_all('td')
    for td in b:
        subel.append(td.string)
    rows.append(subel)
    subel = []

df = pd.DataFrame(rows, columns=['Region','Price_1', 'Percent_change_1', 'Price_2', 'Percent_change_2', 'Spark Spread'])

Обратите внимание, что я использую только a[42:50] часть результатов, потому что содержит все тд сайта. Вы можете использовать остальные, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...