笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

选择动态加载的内容

发布者: 笨鸟自学网



分析javascript代码

如果所需数据是用javascript硬编码的,则首先需要获取javascript代码:

  • 如果javascript代码在javascript文件中,只需读取 response.text .

  • 如果javascript代码在 <script/> HTML页的元素,使用 selectors 提取其中的文本 <script/> 元素。

一旦有了包含javascript代码的字符串,就可以从中提取所需的数据:

  • 你可能会使用 regular expression 以JSON格式提取所需数据,然后可以使用 json.loads() .

    例如,如果javascript代码包含类似 var data = {{"field": "value"}}; 您可以按如下方式提取该数据:

    >>> pattern = r'\bvar\s+data\s*=\s*(\{.*?\})\s*;\s*\n'
    >>> json_data = response.css('script::text').re_first(pattern)
    >>> json.loads(json_data)
    {'field': 'value'}
    
  • chompjs 提供将JavaScript对象解析为 dict .

    例如,如果javascript代码包含 var data = {{field: "value", secondField: "second value"}}; 您可以按如下方式提取该数据:

    >>> import chompjs
    >>> javascript = response.css('script::text').get()
    >>> data = chompjs.parse_js_object(javascript)
    >>> data
    {'field': 'value', 'secondField': 'second value'}
    
  • 否则,使用 js2xml 要将javascript代码转换为XML文档,可以使用 selectors .

    例如,如果javascript代码包含 var data = {{field: "value"}}; 您可以按如下方式提取该数据:

    >>> import js2xml
    >>> import lxml.etree
    >>> from parsel import Selector
    >>> javascript = response.css('script::text').get()
    >>> xml = lxml.etree.tostring(js2xml.parse(javascript), encoding='unicode')
    >>> selector = Selector(text=xml)
    >>> selector.css('var[name="data"]').get()
    '<var name="data"><object><property name="field"><string>value</string></property></object></var>' 

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-12-4 16:17 , Processed in 0.014937 second(s), 17 queries .

© 2001-2020

返回顶部