使用python进行数据分析

时间:2015-06-02 06:04:38

标签: python regex web-scraping

我正在努力从this页面抓取数据,特别是“所有员工的统计表”。

当我尝试使用BeautifulSoup或简单的正则表达式时,我无法拉出表格,可能是因为它是嵌套列表或因为换行符,尽管我真的没有任何线索。

以下是一些示例代码:

url='http://www.forecasts.org/data/data/PAYEMS.htm'

def get( URL): #getting text from the web
    ses = requests.session()
    return ses.get(URL).text 

htmltext=get(url)

regex = 'Date(.+?)All' 
pattern = re.compile(regex)
nonFarm = re.findall(pattern,htmltext)

enter image description here

期望的输出:

[1939-01-01, 29923, 1939-02-01, 30101, ...]

1 个答案:

答案 0 :(得分:1)

问题是所需数据在javascript代码中。

我会使用正则表达式来解析javascript数组,并使用literal_eval()来解析"加载"它进入Python列表:

from ast import literal_eval
from pprint import pprint
import re

import requests


url = 'http://www.forecasts.org/data/data/PAYEMS.htm'
with requests.Session() as session:
    response = session.get(url)

    pattern = re.compile(r"data = google\.visualization\.arrayToDataTable\((.*?)\);", re.MULTILINE | re.DOTALL)
    data = pattern.search(response.content).group(1)

    data = literal_eval(data)
    pprint(data)

打印:

[['Date', 'All Employees: Total nonfarm'],
 ['1939-01-01', 29923],
 ['1939-02-01', 30101],
 ...
 ['2014-07-01', 138976],
 ['2014-08-01', 139118]]