如何解决如何使用请求和buetifulsoup抓取javascript元素
如何抓取元素(系列:~~~~直到~~~~数据:[[90,63000],[91,68000]]}]]并将其转换为字典或列表类型?
这是网站中的javascript:
<script type="text/javascript">
var chart;
var screenWidth = window.innerWidth * 0.935 * 1;
$(document).ready(function() {
series: [{
name: 'Water',data: [[90,50000],[91,53000]]
},{
name: 'Tea',47000],{
name: 'Tonic',63000],68000]]
}]
});
});
</script>
这是我的错误python代码:
s=requests.get(url,params = data,headers)
data= BeautifulSoup(s.text,'lxml')
jsons= data.find_all('script')[1].text
datas= jsons.find('series:')
last= jsons.find(']]')
new=''
for x in range(datas+6,last+2):
new+=jsons[x]
newdata = eval(new)
解决方法
问题在于数据不是json,而是javascript对象。即使您选择json并应用main
,它也会失败。因此,您将需要可以将javascript对象转换为json的第三方库。
我使用json.loads
-https://github.com/dmeranda/demjson
demjson
输出:
from bs4 import BeautifulSoup
import demjson
html = """<script type="text/javascript">
var chart;
var screenWidth = window.innerWidth * 0.935 * 1;
$(document).ready(function() {
series: [{
name: 'Water',data: [[90,50000],[91,53000]]
},{
name: 'Tea',47000],{
name: 'Tonic',63000],68000]]
}]
});
});
</script>"""
script = soup.find("script").text.strip()
data = demjson.decode(script[script.index("{"):script.index("});")] + "}")
print(type(data))
print("-" * 10)
print(data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。