我正在使用BeautifulSoup和Requests抓取一些网站。我正在检查的页面的<script language="JavaScript" type="text/javascript">
标签中包含其数据。看起来像这样:
<script language="JavaScript" type="text/javascript">
var page_data = {
"default_sku" : "SKU12345",
"get_together" : {
"imageLargeURL" : "http://null.null/pictures/large.jpg",
"URL" : "http://null.null/index.tmpl",
"name" : "Paints",
"description" : "Here is a description and it works pretty well",
"canFavorite" : 1,
"id" : 1234,
"type" : 2,
"category" : "faded",
"imageThumbnailURL" : "http://null.null/small9.jpg"
......
有没有一种方法可以通过page_data
此脚本标签内的变量创建python字典或json对象?这比尝试通过BeautifulSoup获取值要好得多。
如果您使用BeautifulSoup获取<script>
标签的内容,则该json
模块可以使用一些字符串魔术来完成其余的工作:
jsonValue = '{%s}' % (textValue.partition('{')[2].rpartition('}')[0],)
value = json.loads(jsonValue)
上面的.partition()
和.rpartition()
组合在JavaScript文本块中的第一个{
和最后一个文本上进行了拆分}
,这应该是您的对象定义。通过将花括号添加回文本,我们可以将其输入json.loads()
并从中获取python结构。
之所以可行,是因为JSON 基本上 是Javascript文字语法对象,数组,数字,布尔值和null。
示范:
>>> import json
>>> text = '''
... var page_data = {
... "default_sku" : "SKU12345",
... "get_together" : {
... "imageLargeURL" : "http://null.null/pictures/large.jpg",
... "URL" : "http://null.null/index.tmpl",
... "name" : "Paints",
... "description" : "Here is a description and it works pretty well",
... "canFavorite" : 1,
... "id" : 1234,
... "type" : 2,
... "category" : "faded",
... "imageThumbnailURL" : "http://null.null/small9.jpg"
... }
... };
... '''
>>> json_text = '{%s}' % (text.partition('{')[2].rpartition('}')[0],)
>>> value = json.loads(json_text)
>>> value
{'default_sku': 'SKU12345', 'get_together': {'imageLargeURL': 'http://null.null/pictures/large.jpg', 'URL': 'http://null.null/index.tmpl', 'name': 'Paints', 'description': 'Here is a description and it works pretty well', 'canFavorite': 1, 'id': 1234, 'type': 2, 'category': 'faded', 'imageThumbnailURL': 'http://null.null/small9.jpg'}}
>>> import pprint
>>> pprint.pprint(value)
{'default_sku': 'SKU12345',
'get_together': {'URL': 'http://null.null/index.tmpl',
'canFavorite': 1,
'category': 'faded',
'description': 'Here is a description and it works pretty '
'well',
'id': 1234,
'imageLargeURL': 'http://null.null/pictures/large.jpg',
'imageThumbnailURL': 'http://null.null/small9.jpg',
'name': 'Paints',
'type': 2}}
如何从下面的html中解析出46389333? 我使用的是JSoup,显然我可以解析文本、标签和其他值。但是我不知道如何解析这个值。即使我只能解析出/exampleTweet/status/46389333,至少我可以解析这个字符串,这要容易得多。问题是,数字变了,显然例子也变了。不过,地位还是存在的,所以也许我可以利用这一点?任何帮助都是巨大的。
我使用Jsoup来解析html文件,并从元素中提取所有可见的文本。问题是javascript变量中有一些html位明显被忽略了。取出这些碎片的最佳方案是什么? 示例: 在这个例子中,Jsoup只从标签中获取文本,这是它应该做的。如何从 跨度中获取文本?该解决方案必须应用于数千个不同的页面,因此我不能依赖具有相同名称的javascript变量之类的东西。
我正在使用beautifulsoup解析“www.youtube”中出现的所有img标签。com' 代码是 但我并没有得到所有的img标签。获取img标记也无效。 解析后得到的img标签与页面源img标签不同。缺少一些属性。 我需要在youtube上获取所有视频img标签。通用域名格式 请帮帮忙
我正在尝试解析
我有一个很大的XML文件,我正在解析如下: 而我的是: 当前我正在显示用户和内容,但我想打印 例如: 我尝试了,但它没有像预期的那样工作。Java8特性也不能正常工作。也尝试了番石榴,但没有用。
本文向大家介绍从局部变量和全局变量开始全面解析Python中变量的作用域,包括了从局部变量和全局变量开始全面解析Python中变量的作用域的使用技巧和注意事项,需要的朋友参考一下 理解全局变量和局部变量 1.定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。例如: 输出结果是123。说明