解析从BeautifulSoup返回的JavaScript

前端之家收集整理的这篇文章主要介绍了解析从BeautifulSoup返回的JavaScript前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@我想解析网页 http://dcsd.nutrislice.com/menu/meadow-view/lunch/来抓住今天的午餐菜单. (我已经建立了一个Adafruit #IoT热敏打印机,我想每天自动打印菜单.)

我最初使用BeautifulSoup接近这个,但事实证明,大部分数据都是加载在JavaScript中,我不知道BeautifulSoup可以处理它.如果您查看来源,您将看到存储在bootstrapData [‘menuMonthWeeks’]中的相关数据.@H_502_3@

import urllib2
from BeautifulSoup import BeautifulSoup

url = "http://dcsd.nutrislice.com/menu/meadow-view/lunch/"
soup = BeautifulSoup(urllib2.urlopen(url).read())

这是一个简单的方法获取源和审查.@H_502_3@

我的问题是:最简单的方法提取这些数据,以便我可以做些什么?从字面上来说,我想要的是一个字符串,如:@H_502_3@

Southwest Cheese Omelet,Potato Wedges,The Harvest Bar (THB),THB – Cheesy Pesto Bread,Ham Deli Sandwich,Red Pepper Sticks,Strawberries@H_502_3@

我曾考虑过使用webkit处理页面获取HTML(即浏览器的功能),但这似乎不必要的复杂.我宁愿找到一些可以解析bootstrapData [‘menuMonthWeeks’]数据的东西.@H_502_3@

解决方法

像PhantomJS这样的东西可能更强大,但是这里有一些基本的Python代码提取完整​​的菜单
import json
import re
import urllib2

text = urllib2.urlopen('http://dcsd.nutrislice.com/menu/meadow-view/lunch/').read()
menu = json.loads(re.search(r"bootstrapData\['menuMonthWeeks'\]\s*=\s*(.*);",text).group(1))

print menu

之后,您将需要搜索菜单中您感兴趣的日期.@H_502_3@

编辑:我的一些过度伤害@H_502_3@

import itertools
import json
import re
import urllib2

text = urllib2.urlopen('http://dcsd.nutrislice.com/menu/meadow-view/lunch/').read()
menus = json.loads(re.search(r"bootstrapData\['menuMonthWeeks'\]\s*=\s*(.*);",text).group(1))

days = itertools.chain.from_iterable(menu['days'] for menu in menus)

day = next(itertools.dropwhile(lambda day: day['date'] != '2014-01-13',days),None)

if day:
    print '\n'.join(item['food']['description'] for item in day['menu_items'])
else:
    print 'Day not found.'
原文链接:https://www.f2er.com/js/151921.html

猜你在找的JavaScript相关文章