gpt4 book ai didi

javascript - 解析从 BeautifulSoup 返回的 JavaScript

转载 作者:太空狗 更新时间:2023-10-29 16:56:13 27 4
gpt4 key购买 nike

我想解析网页http://dcsd.nutrislice.com/menu/meadow-view/lunch/获取今天的午餐菜单。 (我构建了一个 Adafruit #IoT 热敏打印机,我想每天自动打印菜单。)

我最初使用 BeautifulSoup 来解决这个问题,但事实证明大部分数据都是用 JavaScript 加载的,我不确定 BeautifulSoup 是否可以处理它。如果您查看源代码,您会看到存储在 bootstrapData['menuMonthWeeks'] 中的相关数据。

import urllib2
from BeautifulSoup import BeautifulSoup

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

这是获取来源和评论的简单方法。

我的问题是:提取这些数据以便我可以对其进行处理的最简单方法是什么?从字面上看,我想要的只是一个类似这样的字符串:

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

我考虑过使用 webkit 来处理页面并获取 HTML(即浏览器所做的),但这似乎不必要地复杂。我宁愿简单地找到可以解析 bootstrapData['menuMonthWeeks'] 数据的东西。

最佳答案

像 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

之后,您需要在菜单中搜索您感兴趣的日期。

编辑:我有些矫枉过正:

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.'

关于javascript - 解析从 BeautifulSoup 返回的 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069294/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com