获取Javascript变量的值

2024-06-08 23:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Scrapy,如何获取Javascript变量的值。。。。在

这是我的密码。。。在

<script rel="bmc-data">
      var match = 'yes';
      var country = 'uk';
      var tmData = {
        "googleExperimentVariation": "1",
        "pageTitle": "Child Care",
        "page_type": "claimed",
        "company_state": "wyostate",
        "company_city": "mycity"
                   };
</script>

我想检查page_type变量的值。如果它的“声明”处理页面,否则继续。。。。在

我已经看过this和{a2}

我试过了…

^{pr2}$

但这当然行不通,因为我认为我的正则表达式是错误的。在


Tags: 密码datavartypematchpagescriptjavascript
2条回答

我可以建议为此使用^{}(免责声明:我编写了js2xml)

>>> import scrapy
>>> import js2xml
>>> html = '''<script rel="bmc-data">
...       var match = 'yes';
...       var country = 'uk';
...       var tmData = {
...         "googleExperimentVariation": "1",
...         "pageTitle": "Child Care",
...         "page_type": "claimed",
...         "company_state": "wyostate",
...         "company_city": "mycity"
...                    };
... </script>'''
>>> selector = scrapy.Selector(text=html)
>>> selector.xpath('//script/text()').extract_first()
u'\n      var match = \'yes\';\n      var country = \'uk\';\n      var tmData = {\n        "googleExperimentVariation": "1",\n        "pageTitle": "Child Care",\n        "page_type": "claimed",\n        "company_state": "wyostate",\n        "company_city": "mycity"\n                   };\n'
>>> jscode = selector.xpath('//script/text()').extract_first()
>>> print(js2xml.pretty_print(jstree))
<program>
  <var name="match">
    <string>yes</string>
  </var>
  <var name="country">
    <string>uk</string>
  </var>
  <var name="tmData">
    <object>
      <property name="googleExperimentVariation">
        <string>1</string>
      </property>
      <property name="pageTitle">
        <string>Child Care</string>
      </property>
      <property name="page_type">
        <string>claimed</string>
      </property>
      <property name="company_state">
        <string>wyostate</string>
      </property>
      <property name="company_city">
        <string>mycity</string>
      </property>
    </object>
  </var>
</program>

>>> jstree.xpath('//var[@name="tmData"]/object')[0]
<Element object at 0x7f0b0018f050>

>>> from pprint import pprint
>>> data = js2xml.jsonlike.make_dict(jstree.xpath('//var[@name="tmData"]/object')[0])
>>> pprint(data)
{'company_city': 'mycity',
 'company_state': 'wyostate',
 'googleExperimentVariation': '1',
 'pageTitle': 'Child Care',
 'page_type': 'claimed'}
>>> data['page_type']
'claimed'
>>> 

您的regex模式在这里有问题:

# you are looking for this bit: "page_type": "claimed",
re.findall('page_type": "(.+)"', html_body)
# ["claimed"]

或者在你的案例中,关于“垃圾选择器”的上下文:

^{pr2}$

若您需要像这样解析多个变量,我建议使用Paul提到的答案,因为regex并不总是像xml解析那样可靠。在

相关问题 更多 >