如何用Python转换股市HTML页面进行数据分析?

问题描述

我一直在为自己的工作分析股市,通常我将数据手动输入到Excel中进行分析。最近,我一直在使用Python进行数据分析和Web抓取。我希望从香港交易所的网站中提取数据。

例如,https://www.hkex.com.hk/eng/stat/dmstat/dayrpt/hsif200819.htm,我希望提取香港期货合约的数据。可以清楚地看到,有一个表包含我想要的数据,但是我发现Java脚本不包含任何用于提取的表。而是所有文本格式。

我已捕获了该屏幕,以指示要捕获以进行分析的数据。如果可以将整个表转换为数据框以便于分析,则将很有用。 Data to be captured

我尝试使用python的beautifulsoup包提取数据,但徒劳。

非常感谢!

解决方法

有很多方法可以做到这一点-即使不使用任何代码。

以下是该网站的详细信息:https://docs.python-guide.org/scenarios/scrape/

进口:

from lxml import html
import requests
Next we will use requests.get to retrieve the web page with our data,parse it using the html module,and save the results in tree:

page = requests.get('http://econpy.pythonanywhere.com/ex/001.html')
tree = html.fromstring(page.content)

(我们需要使用page.content而不是page.text,因为html.fromstring隐式希望使用字节作为输入。)

现在,

tree以一个漂亮的树结构包含整个HTML文件,我们可以通过两种不同的方式进行检查:XPath和CSSSelect。在此示例中,我们将集中讨论前者。

XPath是一种在结构化文档(例如HTML或XML文档)中定位信息的方法。 W3Schools很好地介绍了XPath。

还有多种用于获取元素XPath的工具,例如Firefox的FireBug或Chrome Inspector。如果您使用的是Chrome,则可以右键单击一个元素,选择“检查元素”,突出显示代码,再次右键单击,然后选择“复制XPath”。

经过快速分析,我们发现页面中的数据包含两个元素–一个是标题为'buyer-name'的div,另一个是级别为'item-price'的span:

<div title="buyer-name">Carson Busses</div>
<span class="item-price">$29.95</span>
Knowing this we can create the correct XPath query and use the lxml xpath function like this:

#This will create a list of buyers:
buyers = tree.xpath('//div[@title="buyer-name"]/text()')
#This will create a list of prices
prices = tree.xpath('//span[@class="item-price"]/text()')
Let’s see what we got exactly:

print 'Buyers: ',buyers
print 'Prices: ',prices
Buyers:  ['Carson Busses','Earl E. Byrd','Patty Cakes','Derri Anne Connecticut','Moe Dess','Leda Doggslife','Dan Druff','Al Fresco','Ido Hoe','Howie Kisses','Len Lease','Phil Meup','Ira Pent','Ben D. Rules','Ave Sectomy','Gary Shattire','Bobbi Soks','Sheila Takya','Rose Tattoo','Moe Tell']

Prices:  ['$29.95','$8.37','$15.26','$19.25','$13.99','$31.57','$8.49','$14.47','$15.86','$11.11','$15.98','$16.27','$7.50','$50.85','$14.26','$5.68','$15.00','$114.07','$10.09']

这将成功使用lxml和Requests从网页中抓取我们想要的所有数据。我们将其作为两个列表存储在内存中。现在,我们可以使用它进行各种有趣的工作:可以使用Python对其进行分析,也可以将其保存到文件中并与世界共享。

还有更多更酷的想法可以考虑修改此脚本以遍历此示例数据集的其余页面,或者重写此应用程序以使用线程来提高速度。