从 javascript 标签中获取数据

版权声明: https://blog.csdn.net/qq_34246164/article/details/82229007

之前的一篇博客,介绍了使用js2xml 模块来解决javascript标签中的数据问题,但实际操作后发现,使用js2xml解析js得到的标签书,太过于反人类了。标签树是得到了,但获取数据就难了很多,那样的标签毕竟不是适合阅读的。

今天又查看了下上篇文章中js的包含的数据结构,不就是dict或者json嘛。顿时感觉发现了新大陆。

                                                          

既然如此,那就直接开始干了。

首先选定一个目标,我们就直接选择360图片来进行实验,这是链接,打开后,别忘右键查看源代码哦

                                                                          

接下来就是开始直接开始写代码了。

还是万年不变的套路,先导入相关的模块,然后获取页面,标签定位,获取信息

import requests
from bs4 import BeautifulSoup as bs
import json

url = "http://image.so.com/z?ch=wallpaper&t1=156"

r = requests.get(url)

s = bs(r.content,'lxml')
src = s.find(id='initData').text

好了,我们已经获取到想要的信息了,接下来,我们就是直接使用dict或者json操作了吗?

                                                        

首先,我们来来判断下获取到的数据类型:

print(type(src))

返回的结果是:
 

<class 'str'>

   what? 不是dict的类型,那该怎么获取数据呢?别急,不是导入了json模块吗?json模块下的loads方法,可以直接将类似于'{'name':'eric', 'age': 23}'的数据格式,直接转化为dict。好了,问题已经解决了,那我们 又可以愉快的继续下去了

首先是转换数据格式:

d = json.loads(src)

  然后我们再判断下数据类型:

print(type(d))

返回的结果:

<class 'dict'>


可以看到已经成功转换为dict了,接下来就可以按照字典的操作方式获取数据了,先来个小例子,比如获取 "ch" 对应的 “wallpaper”的数据,并打印出来

print(d.get('ch'))

结果如下:
 

wallpaper

到此,已经成功将js的数据转化为dict格式,也已经能够成功获取到数据了,激不激动?你以为到这里文章就结束了,爱学习的博主怎么可能到这里就罢休了呢?可以将"{}" 这种格式的数据转化为字典的方法就只有json一种吗?No,当然不止这一种,下面将逐一来介绍。

                                                  

第一种:使用eval(详细介绍

实例如下:
 

a = '{"a":"1", "b":"1"}'
b = evel(a)
print(type(b))

>>>

class 'dict'

第二种:转换后赋值给 b(exec详细介绍

a = '{"a":"1", "b":"1"}'
exec('b='+a)
print(type(b))

>>>
class 'dict'

第3种:先导入json ,--import json(也就是我们现在说的这种方法了

import json
a = '{"a":"1", "b":"1"}'
c=json.loads(a)
print(type(c))

>>>
class 'dict'

好了,到这里就结束了

                                                                

猜你喜欢

转载自blog.csdn.net/qq_34246164/article/details/82229007