首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python拆分Javascript代码(bs4)

如何使用Python拆分Javascript代码(bs4)
EN

Stack Overflow用户
提问于 2019-08-02 10:27:23
回答 1查看 97关注 0票数 0

因此,在尝试从bs4代码中刮取Javascript值时,我遇到了一些问题。

基本上,javascript看起来就像

代码语言:javascript
复制
<script type="text/javascript">
var FancyboxI18nClose = 'Close';
var FancyboxI18nNext = 'Next';
var FancyboxI18nPrev = 'Previous';
var PS_CATALOG_MODE = false;
var ajaxsearch = true;
var attribute_anchor_separator = '-';
var blocksearch_type = 'top';
var combinationsFromController = {"163972":{"attributes_values":{"15":"40"},"attributes":[75],"price":0,"specific_price":false,"ecotax":0,"weight":0.6,"quantity":1,"reference":"IDP20059--IDPA163972","unit_impact":0,"minimal_quantity":"1","date_formatted":"","available_date":"","id_image":-1,"list":"'75'"}};
var comparator_max_item = 0;
</script>

我在这里试图做的是刮掉var combinationsFromController =的值,但是我想做的是:

代码语言:javascript
复制
bs4 = soup(requests.text, 'html.parser')

for nosto_sku_tag in bs4.find_all('script', {'type': 'text/javascript'}):
    if 'combinationsFromController' in nosto_sku_tag.text.strip():
        print(nosto_sku_tag)
        for att, values in json.loads(
                re.findall('var combinationsFromController = (\{.*}?);', nosto_sku_tag.text.strip())[0][:-1]).values():
            print(values)

这给了我一个错误的Expecting ',' delimiter: line 1 column 4112 (char 4111)

我意识到每当我想要做的时候

代码语言:javascript
复制
for nosto_sku_tag in bs4.find_all('script', {'type': 'text/javascript'}):
    if 'combinationsFromController' in nosto_sku_tag.text.strip():
        print(nosto_sku_tag)
        print("---------")

照片给了我:

代码语言:javascript
复制
var FancyboxI18nClose = 'Close';
var FancyboxI18nNext = 'Next';
var FancyboxI18nPrev = 'Previous';
var PS_CATALOG_MODE = false;
var ajaxsearch = true;
var attribute_anchor_separator = '-';
var blocksearch_type = 'top';
var combinationsFromController = {"163972":{"attributes_values":{"15":"40"},"attributes":[75],"price":0,"specific_price":false,"ecotax":0,"weight":0.6,"quantity":1,"reference":"IDP20059--IDPA163972","unit_impact":0,"minimal_quantity":"1","date_formatted":"","available_date":"","id_image":-1,"list":"'75'"}};
var comparator_max_item = 0;
----------------------------

这似乎意味着javascript代码是我认为可能需要拆分的代码,但是我尝试使用regex,但它并没有帮助我。

因此,我的问题是,我如何能够只刮擦 var combinationsFromController =

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-02 10:56:53

使用以下regex模式隔离分配给该变量的整个javascript对象。

代码语言:javascript
复制
combinationsFromController = (.*?);

试试吧,这里

例如。

代码语言:javascript
复制
import requests, re, json

r = requests.get(url)
p = re.compile(r'combinationsFromController = (.*?);', re.DOTALL)
data = json.loads(p.findall(r.text)[0])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57324630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档