当前位置: 首页 > 面试题库 >

解析从BeautifulSoup返回的JavaScript

濮丰
2023-03-14
问题内容

我想解析网页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())

这是获取来源和进行审核的简便方法。

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

西南奶酪煎蛋卷,薯角,收获棒(THB),THB-俗气的香蒜酱面包,火腿熟食三明治,红辣椒棒,草莓

我曾考虑过使用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.'


 类似资料:
  • 问题内容: 我编写了一个简单的脚本,用于使用BeautifulSoup模块解析XML聊天日志。标准的soup.prettify()可以正常工作,只是聊天日志中有很多绒毛。您可以在下面看到脚本代码和我正在使用的一些XML输入文件: 码 测试XML输入 我希望能够将其输出为以下格式或至少比纯XML更可读的格式: 乔恩:嘿,怎么了?[10/31/10 @ 3:43p] 乔恩:收到了您的消息[10/31/

  • 问题内容: 我想做的事情似乎很简单:通过 HTML 页面并从中提取一个值。 问题是 jQuery 拒绝解析返回的HTML。 同时,我正在玩的小提琴没有用,因此我无法提供其他可行的示例。 更新: 我的新提琴工作正常,但是似乎问题在于,在我的实际项目中,我试图解析大量复杂的HTML。这是一个已知问题吗? 问题答案: 您的代码工作正常。您只是没有正确使用jsFiddle的API。检查文档中的(http:

  • 我想将正确格式的JSON从节点服务器发送回前端。 然后在前端,我使用jQuery发出一个请求 这是返回数据,但是,它是以字符串的形式返回数据。我尝试使用JSON. parse,但得到以下错误消息。节点端的数据是一个对象数组。也许这引起了一个问题。 未捕获的SyntaxError:意外的标记,在JSON中位于2847(…) 要填充轨道数组,我有以下代码 轨迹数组中的第一项是: "{↵ "专辑“:{↵

  • 问题内容: 我正在尝试使用BeautifulSoup从html文档中获取一些文本。在我看来,这很奇怪,它产生了一个奇怪而有趣的结果:在某一点之后,汤在文本中充满了多余的空格(空格将每个字母与下一个字母分隔开)。我试图在网络上搜索以找到原因,但是我只遇到了有关相反错误的一些消息(根本没有空格)。 您对它为什么会发生以及如何解决此问题有任何建议或提示吗? 这是我创建的非常基本的代码: 这是从结果中提取

  • 我正在使用beautifulsoup解析“www.youtube”中出现的所有img标签。com' 代码是 但我并没有得到所有的img标签。获取img标记也无效。 解析后得到的img标签与页面源img标签不同。缺少一些属性。 我需要在youtube上获取所有视频img标签。通用域名格式 请帮帮忙

  • 在我的Android客户端中,我试图解析这个错误,以便将其显示给用户: 然而,我在Android Studio中发现了一个错误: 我认为问题是返回的错误以开头,而不是一个打开的括号。 问题:是否有一种正确的方法来解析云endpoint错误,以获得代码和消息,以便我可以将其显示给我的用户? 我在文档中看到一些Java代码如下所示: