2017-05-30 81 views
2

我目前正在为某些文本搜索网页。我一直在使用的代码:使用Python在{{}}中查找由JavaScript填充的信息

import urllib 
import re 

find = "All others" 
pageChecker = urllib.urlopen("192.168.1.134/dashboard").read() 
if find in pageChecker: 
    print "Search found!" 
else: 
    print "Search not found" 

页面的HTML可以找到here

对于以段落形式填写的任何文本都可以正常工作,但问题在于我试图找到由{{}}填写的信息。例如,有一个叫做

{{story.type}} 

当网页被查看时,这显示为一个数字。我怎么知道这个数字是什么?

+2

我认为你可以使用,如果'startswith( '{{')和的endsWith( '}}')'' – mtkilic

+0

re.findall(R'\ {\ {([^ \}] *)\ } \}',pageChecker)'返回所有感兴趣片段的列表。 – DyZ

回答

2

那些花括号用于运行时模板。这意味着您试图从使用一些库的HTML5应用程序(如AngularJS,Vue.js等)提取数据。基本上,您必须运行JavaScript才能获取这些占位符。

因此,有两种解决方案在这里:

  1. 使用浏览器打开网页。这将运行JavaScript代码,然后您可以查询该字段。您可以使用PhantomJS,SlimerJS或WebDriver与您想要的任何浏览器完成此操作。

  2. JavaScript应用程序本身必须从某处获取数据,最有可能来自JSON服务。打开您最喜欢的浏览器开发人员控制台,打开网络选项卡,然后导航至仪表板。你会看到一些请求。搜索包含所需信息的文件,然后从Python中打开,而不是获取HTML。

0

内找到{{ S和}} S中所有物品的清单,把import re在程序的开始,然后re.findall(r"\{\{(.*)\}\}", pageChecker)应该给你这样的名单。