我正在努力从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)
期望的输出:
[1939-01-01, 29923, 1939-02-01, 30101, ...]
答案 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]]