Извлечение данных в файл Excel из тела <html>в Python - PullRequest
0 голосов
/ 08 января 2019

Я использую mechanize для получения данных с сайта, защищенного паролем, на который у меня есть подписка.

Я могу добраться до .txt сайта, используя код:

import mechanize
from bs4 import BeautifulSoup

username = ''
password = ''

login_post_url = "http://www.naturalgasintel.com/user/login"
internal_url = "https://naturalgasintel.com/ext/resources/Data-Feed/Daily-GPI/2018/12/20181221td.txt"

browser = mechanize.Browser()
browser.open(login_post_url)
browser.select_form(nr = 1)
browser.form['user[email]'] = username
browser.form['user[password]'] = password
browser.submit()

response = browser.open(internal_url)
print response.read().decode('utf-8').encode('utf-8')

Это печатает, что я хотел бы, чтобы формат выглядел (минус дополнительный пробел между точками данных):

Point Code      Issue Date      Trade Date      Region  Pricing Point   Low     High    Average Volume  Deals   Delivery Start Date     Delivery End Date
STXAGUAD        2018-12-21      2018-12-20      South Texas     Agua Dulce                                              2018-12-21      2018-12-21
STXFGTZ1        2018-12-21      2018-12-20      South Texas     Florida Gas Zone 1      3.580   3.690   3.660   30      7       2018-12-21      2018-12-21
STXNGPL 2018-12-21      2018-12-20      South Texas     NGPL S. TX                                              2018-12-21      2018-12-21
STXTENN 2018-12-21      2018-12-20      South Texas     Tennessee Zone 0 South  3.460   3.580   3.525   230     42      2018-12-21      2018-12-21
STXTETCO        2018-12-21      2018-12-20      South Texas     Texas Eastern S. TX     3.510   3.575   3.530   120     28      2018-12-21      2018-12-21
STXST30 2018-12-21      2018-12-20      South Texas     Transco Zone 1  3.505   3.505   3.505   9       2       2018-12-21      2018-12-21
STX3PAL 2018-12-21      2018-12-20      South Texas     Tres Palacios   3.535   3.720   3.630   196     24      2018-12-21      2018-12-21
STXRAVG 2018-12-21      2018-12-20      South Texas     S. TX Regional Avg.     3.460   3.720   3.570   584     103     2018-12-21      2018-12-21

Но я бы хотел прочитать и записать все эти данные в файл Excel.

Я пытался использовать soup = BeautifulSoup(response.read().decode('utf-8').encode('utf-8'), чтобы разбить его на настоящий текст, который дает мне то же самое, за исключением формы html:

<html><body><p>Point Code\tIssue Date\tTrade Date\tRegion\tPricing Point\tLow\tHigh\tAverage\tVolume\tDeals\tDelivery Start Date\tDelivery End Date\nSTXAGUAD\t2018-12-21\t2018-12-20\tSouth Texas\tAgua Dulce\t\t\t\t\t\t2018-12-21\t2018-12-21\nSTXFGTZ1\t2018-12-21\t2018-12-20\tSouth Texas\tFlorida Gas Zone 1\t3.580\t3.690\t3.660\t30\t7\t2018-12-21\t2018-12-21\nSTXNGPL\t2018-12-21\t2018-12-20\tSouth Texas\tNGPL S. TX\t\t\t\t\t\t2018-12-21\t2018-12-21\nSTXTENN\t2018-12-21\t2018-12-20\tSouth Texas\tTennessee Zone 0 South\t3.460\t3.580\t3.525\t230\t42\t2018-12-21\t2018-12-21\nSTXTETCO\t2018-12-21\t2018-12-20\tSouth Texas\tTexas Eastern S. TX\t3.510\t3.575\t3.530\t120\t28\t2018-12-21\t2018-12-21\

Я мог бы начать смотреть на удаление html-тегов из этой переменной soup, но есть ли способ легче вырезать эти данные?

1 Ответ

0 голосов
/ 08 января 2019

Поскольку вы указали, что с Python3 у вас все в порядке, я бы предложил следующие шаги:

Скачать Anaconda

Скачать Anaconda Python для вашей ОС

По более широкому мнению, Anaconda имеет лучшую встроенную поддержку науки данных и поиска данных Вы будете загружать Python 3.7, который предоставляет вам все функциональные возможности (пара изменений) Python 2.7, без головной боли. Что важно для вашего случая, так это то, что python 2.7 является проблемой при работе с utf-8 Это исправит многие из этих проблем:

Установите свои библиотеки

После установки Anaconda (и после того, как вы настроили conda.exe в системную переменную PATH , что занимает 2 минуты , если вы отказались от нее во время установки), вам нужно будет установить ваши пакеты. Судя по вашему сценарию, это будет выглядеть примерно так:

conda install mechanize,bs4,requests,lxml -y

Будьте терпеливы - это может занять 2-10 минут для conda, чтобы "решить вашу среду" перед установкой чего-либо.

Анализ ваших данных с помощью Pandas

Здесь вы можете попробовать 2 варианта, и они зависят от того, насколько вам повезло с форматированием HTML, который вы просматриваете

import pandas as pd # This can go at the top with the other imports.

Использование pandas.read_html ()

response = browser.open(internal_url)
html = response.read().decode('utf-8').encode('utf-8')
df = pd.read_html(html)
print(df) # This should give you a preview of *fingers-crossed* each piece of data in it's own cell.
pd.to_csv(df,"naturalgasintel.csv")

Использование pandas.read_data ()

response = browser.open(internal_url)
soup = BeautifulSoup(str(innerHTML.encode('utf-8').strip()), 'lxml')
# If your data is embedded within a nested table, you may need to run soup.find() here
df = pd.DataFrame.from_records(soup)
print(df) # This should give you a preview of *fingers-crossed* each piece of data in it's own cell.
pd.to_csv(df,"naturalgasintel.csv")

Надеюсь, это поможет! Pandas - это фантастическая библиотека для интуитивного анализа ваших данных.

...