Python - поиск определенного "var" с помощью bs4 - PullRequest
0 голосов
/ 26 декабря 2018

Итак, я пытался немного научиться с помощью скраба, где мне удалось отсканировать сайт, где он возвращает массив различных значений var, таких как:

var FancyboxI18nClose = 'Close';
var FancyboxI18nNext = 'Next';
var FancyboxI18nPrev = 'Previous';
var PS_CATALOG_MODE = false;
var added_to_wishlist = '.';
var ajax_allowed = true;
var ajaxsearch = true;
var attribute_anchor_separator = '-';
var attributesCombinations = [{"id_attribute":"100","id_attribute_group":"1","attribute":"38_5"},{"id_attribute":"101","id_attribute_group":"1","attribute":"39"},{"id_attribute":"103","id_attribute_group":"1","attribute":"40"},{"id_attribute":"104","id_attribute_group":"1","attribute":"40_5"},{"id_attribute":"105","id_attribute_group":"1","attribute":"41"},{"id_attribute":"107","id_attribute_group":"1","attribute":"42"},{"id_attribute":"108","id_attribute_group":"1","attribute":"42_5"},{"id_attribute":"109","id_attribute_group":"1","attribute":"43"},{"id_attribute":"111","id_attribute_group":"1","attribute":"44"},{"id_attribute":"112","id_attribute_group":"1","attribute":"44_5"},{"id_attribute":"132","id_attribute_group":"1","attribute":"45"},{"id_attribute":"113","id_attribute_group":"1","attribute":"46"}];

Конечно, есть еще много, и онивсе содержат только в вар.Тем не менее, я хочу иметь возможность только очистить одно из значений - var attributeCombination , означающее, что я просто хочу распечатать это значение, где впоследствии я могу использовать json.loads, где я могу очиститьJSON проще, а.

Я пытался сделать следующее:

try:
    product_li_tags = bs4.find_all(text=re.compile('attributesCombinations'))
except Exception:
    product_li_tags = []

, но это дало результат всего начала "var", где attributesCombinations.

['var CUSTOMIZE_TEXTFIELD = 1;\nvar FancyboxI18nClose = \'Close\';\nvar FancyboxI18nNext = \'Next\';\nvar FancyboxI18nPrev = \'Previous\';\nvar PS_CATALOG_MODE = false;\nvar added_to_wishlist = \'The product was successfully added to your wishlist.\';\nvar ajax_allowed = true;\nvar ajaxsearch = true;\nvar allowBuyWhenOutOfStock = false;\nvar attribute_anchor_separator = \'-\';\nvar attributesCombinations = [{"id_attribute":"100","id_attribute_group":"1","att...........

Как мне сделать так, чтобы он печатал только var attributeCombitions ?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

не используйте re.compile в bs4, запустите его напрямую.

match = re.compile('var\s*attributesCombinations\s*=\s*(\[.*?\])').findall(htmlString)
attributesCombinations = json.loads(match[0])
print(attributesCombinations)
0 голосов
/ 26 декабря 2018

Регулярное выражение, которое извлекает (просто) части из attributesCombinations до конца оператора:

var attributesCombinations = (\[.*?\])

В Python вы можете легко создать регулярное выражение как

re.compile(r'var attributesCombinations = (\[.*?\])');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...