codecamp

scrapy 2.3 分析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>'
scrapy 2.3 处理不同的响应格式
scrapy 2.3 预渲染JavaScript
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

scrapy 2.3 链接提取器

scrapy 2.3 统计数据集合

scrapy 2.3 发送电子邮件

scrapy 2.3 蜘蛛合约

scrapy 2.3 如何部署蜘蛛

scrapy 2.3 AutoThrottle扩展

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }