【发布时间】:2019-06-02 16:10:34
【问题描述】:
我正在使用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\
我可以开始考虑从 soup 变量中剥离 html 标记,但有没有办法更轻松地剥离这些数据?
【问题讨论】:
-
你需要使用python 2.7吗?老实说,使用 csv 并尝试使用 utf-8 是一个很大的麻烦。从经验上讲,如果您可以进行切换,现在只会节省大量时间和头痛。
-
现在没有了。我使用 2.7 只是因为一个旧脚本使用了
twill包 - 但它造成的损害大于好处。我可以使用 3.x -
太棒了,2 秒内我会为您找到答案 :) 来自埃德蒙顿的问候!
-
好的,我为你更新了答案。这应该会让你走上你想要去的地方。
-
艾伯塔人团结起来!
标签: python html python-2.7 parsing beautifulsoup