【发布时间】:2018-06-28 00:33:51
【问题描述】:
呸。我花了相当多的时间试图找到如何正确甚至是骇人听闻地做到这一点,我只是被难住了。我从一个站点下载了 2500 多个 HTML 文件,我只需要从任何给定页面提取有限数量的信息:页面描述的谈话标题(所以我可以将这些数据与一个巨人CSV 我们已经有了),然后是给定演讲的事件,以及演讲的发布日期。
这些页面的 HTML 非常庞大,并且充满了 <script> 元素。我只想要后面跟着q 的那个。开始此块的行如下所示:
<script>q("talkPage.init", {
接下来是相当多的数据。我只需要看起来像这样的三个项目:
"event":"TEDGlobal 2005",
"filmed":1120694400,
"published":1158019860,
幸运的是,"filmed" 和"published" 在这个大块中只出现一次,但"event" 出现了多次。它总是一样的,所以我不在乎任何脚本抓取其中的哪一个。
我的想法是使用 BeautifulSoup 找到 <script>q 元素,然后将其传递给 json 模块进行解析,但我不知道要告诉 strong>soup 来获取 <script> 元素,然后是 aq —— 类和 id 很容易。其次是……没那么多。
为了开始处理 JSON 部分,我创建了一个文本文件,其中只有 <script>q 元素的内容,但我承认让 json 模块来加载它工作不太好。
我的实验代码首先加载带有我感兴趣的 JSON 块的文本文件,然后尝试对其进行解码,以便我可以用它做其他事情:
import json
text = open('dawkins_script_element.txt', 'r').read()
data = json.loads(text)
但显然 JSON 解码器不喜欢我所拥有的,因为它会抛出 ValueError: Expecting value: line 1 column 1 (char 0)。呸!
此脚本元素的前三行如下所示:
<script>q("talkPage.init", {
"el": "[data-talk-page]",
"__INITIAL_DATA__":
这就是我目前所处的位置。任何可以在 soup 或 json 上完成此任务的信息将不胜感激。
【问题讨论】:
标签: python json beautifulsoup