添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

BeautifulSoup是一个html解析器;您还需要一个JavaScript解析器。顺便说一句,某些javascript对象文字是无效的json(尽管在您的示例中,文字也是有效的json对象)。

在简单的情况下,您可以:

假设这window.blog...是一行或';'对象内部没有任何内容,并使用简单的字符串操作或正则表达式提取javascript对象文字

假设该字符串是有效的json并使用json模块对其进行解析

#!/usr/bin/env python

html = """

extract javascript object as json

// ..

window.blog.data = {"activity":{"type":"read"}};

// ..

some other html here

import json

import re

from bs4 import BeautifulSoup # $ pip install beautifulsoup4

soup = BeautifulSoup(html)

script = soup.find('script', text=re.compile('window\.blog\.data'))

json_text = re.search(r'^\s*window\.blog\.data\s*=\s*({.*?})\s*;\s*$',

script.string, flags=re.DOTALL | re.MULTILINE).group(1)

data = json.loads(json_text)

assert data['activity']['type'] == 'read'

如果假设不正确,则代码将失败。

为了放松第二个假设,可以使用JavaScript解析器代替正则表达式,例如,slimit(由@approximatenumber建议):

from slimit import ast # $ pip install slimit

from slimit.parser import Parser as JavascriptParser

from slimit.visitors import nodevisitor

soup = BeautifulSoup(html, 'html.parser')

tree = JavascriptParser().parse(soup.script.string)

obj = next(node.right for node in nodevisitor.visit(tree)

if (isinstance(node, ast.Assign) and

node.left.to_ecma() == 'window.blog.data'))

# HACK: easy way to parse the javascript object literal

data = json.loads(obj.to_ecma()) # NOTE: json format may be slightly different

assert data['activity']['type'] == 'read'

无需将对象文字(obj)视为json对象。为了获得必要的信息,obj可以像其他ast节点一样递归访问。它将允许支持任意javascript代码(可由解析slimit)。

2020-12-20

小编典典BeautifulSoup是一个html解析器;您还需要一个JavaScript解析器。顺便说一句,某些javascript对象文字是无效的json(尽管在您的示例中,文字也是有效的json对象)。在简单的情况下,您可以:使用html解析器提取文本假设这window.blog...是一行或';'对象内部没有任何内容,并使用简单的字符串操作或正则表达式提取javascript对象文字假设该字...
一、初识 正则 表达式 正则 表达式 是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列,相匹配快速检索文本、实现替换文本的操作 json (xml) 轻量级 web 数据交换格式 import re\na='C|C++|Java|C#|| Python | Javascript ' r= re.findall(' Python ',a) print(r) if len(r) > 0: print('字符串 包含 Python ') else: print('No') [' Python '] 字符串 包含 Python 二、元字符与普通字符 import re a='C0C++7Java8C#9Py
铁路图生成器 这是一个 使用 SVG 生成铁路图(如 使用 的)的小型库,具有 JS Python 端口。 铁路图是一种以比 使用 正则 表达式或 BNF 更具可读性的形式直观地表示语法的方式。 它们可以轻松表示任何上下文无关文法,以及一些更强大的文法。 有几个铁路图生成器,但它们都没有我想要的视觉吸引力,所以我自己写了一个。 (对于 Python ,请参阅或pip install railroad-diagrams 。) 要 使用 该库,请在 页面 包含railroad.css ,并在脚本 导入railroad. js ,然后调用 Diagram() 函数。 它的参数是图表的组成部分(图表是序列的一种特殊形式)。 每个节点的构造函数在模 命名为导出; 默认导出是一个只调用构造函数的同名函数的 对象 ,因此您可以构建图表而不必到处发送new垃圾邮件: // Use the construc
有时候,我们可能会遇到数据是以 JSON 字符串的形式包裹在 Script 标签 ,此时 使用 BeautifulSoup 仍然可以很方便的 提取 。 假设有以下这段 页面 结构: <script type="application/ld+ json " id="DATA_INFO"> "user": { "isLogin": true, 一、强大的BeautifulSoup:BeautifulSoup是一个可以从 html 或xml文件 提取 数据的 Python 库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。在 Python 开发 ,主要用的是BeautifulSoup的查找 提取 功能,修改功能很少 使用 1、安装BeautifulSoup pip3 install beautifulsoup4 2、安装第三方 html 解析 器lxml pip3 i.
可以 使用 re模 正则 表达式来 提取 html 文档 文信息。具体方法是先 使用 正则 表达式匹配出所有的 文字符,然后再 使用 re.sub()函数将非 文字符替换为空格,最后再 使用 strip()函数去除多余的空格即可。以下是示例代码: import re html = """ <title>测试 页面 </title> </head> <h1>欢迎来到测试 页面 </h1> <p>这是一段 文文本。</p> <p>这是另一段英文文本。</p> </body> </ html > pattern = re.compile('[\u4e00-\u9fa5]+') chinese_text = ' '.join(re.findall(pattern, html )).strip() print(chinese_text) 输出结果为:这是一段 文文本