Извлечение информации из <script>с помощью Beautifulsoup! Python - PullRequest
0 голосов
/ 19 июня 2020

Я здесь новенький и надеюсь, что ты сможешь помочь. Я уже некоторое время изучаю Python, а в настоящее время практикую веб-скрапинг.

Я пробовал beautifulsoup, который работал, пока меня не поразил этот скрипт. Я использовал красивый веб-сайт, чтобы сделать его читабельным.

<div class="uq-hide js_variationsJSON">
            </div>  
    <div class="pdpStage__column pdp__details js_pdp-details">
         <script>
          var pdpVariationsJSON = 

        {
            "color-COL05|size-SMA002": {
                "id": "419994COL05SMA002000",
                "attributes": { "color": "Gray", "size": "XS" },
                "availability": { "status": "IN_STOCK", "statusQuantity": "0", "inStock": true, "ats": "19", "inStockDate": "", "availableForSale": true, "purchaseLevel": "", "levels": { "IN_STOCK": 1, "PREORDER": 0, "BACKORDER": 0, "NOT_AVAILABLE": 0 }, "isAvailable": true, "inStockMsg": "1 Item(s) In Stock", "preOrderMsg": "0 item(s) are available for pre-order.", "backOrderMsg": "Back Order 0 item(s)" },
                "pricing": {
                    "showStandardPrice": false,
                    "isPromoPrice": false,
                    "standard": 59.9,
                    "formattedStandard": "£59.90",
                    "sale": 59.9,
                    "formattedSale": "£59.90",
                    "salePriceMoney": {},
                    "standardPriceMoney": {},
                    "pricePercentage": "",
                    "quantities": [
                        { "unit": "", "value": 0 }
                        ]
                },
                "applicablebadges": [
                    { "id": "extendedSize", "value": "global.badge.extrasize", "coValue": "XXS-3XL", "class": "grey" }
                    ]
            },
            "color-COL05|size-SMA003": {
                "id": "419994COL05SMA003000",
                "attributes": { "color": "Gray", "size": "S" },
                "availability": { "status": "IN_STOCK", "statusQuantity": "0", "inStock": true, "ats": "24", "inStockDate": "", "availableForSale": true, "purchaseLevel": "", "levels": { "IN_STOCK": 1, "PREORDER": 0, "BACKORDER": 0, "NOT_AVAILABLE": 0 }, "isAvailable": true, "inStockMsg": "1 Item(s) In Stock", "preOrderMsg": "0 item(s) are available for pre-order.", "backOrderMsg": "Back Order 0 item(s)" },
                "pricing": {
                    "showStandardPrice": false,
                    "isPromoPrice": false,
                    "standard": 59.9,
                    "formattedStandard": "£59.90",
                    "sale": 59.9,
                    "formattedSale": "£59.90",
                    "salePriceMoney": {},
                    "standardPriceMoney": {},
                    "pricePercentage": "",
                    "quantities": [
                        { "unit": "", "value": 0 }
                        ]
                },
                "applicablebadges": [
                    { "id": "extendedSize", "value": "global.badge.extrasize", "coValue": "XXS-3XL", "class": "grey" }
                    ]
            },

Каждый раз я получаю результат None или весь код, но без этого бита. Не знаю почему.

Вот как я это называю

req = Request(link, headers={'User-Agent': 'Mozilla/5.0'})
link= mylink
w = urlopen(req).read()
soup = BeautifulSoup(w, "html.parser")
new = soup.find('div',{'class':'pdpGrid pdp__module pdpStage js_pdpGrid js_pdpGrid-    no-quickview'})
print(new)

Буду признателен за любой совет

Вот ссылка в качестве примера на сайт: ' https://www.uniqlo.com/uk/en/product/men-ultra-light-down-jacket-419994COL09SMA005000.html '

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Скорее всего загружается javascript постфактум. Как упоминалось в Aero Blue, вы можете найти место, откуда он изначально, или, если вы можете это сделать, вы можете попробовать Selenium. Selenium помогает обрабатывать веб-страницы, на которых запущено javascript.

0 голосов
/ 19 июня 2020

У меня нет веб-сайта, поэтому трудно точно знать, что происходит, но я могу представить, что тег скрипта, который вы видите, генерируется посредством запроса при загрузке страницы.

Поскольку javascript не выполняется путем запроса страницы, он не будет отображаться.

Я бы посоветовал взглянуть на вкладку «Сеть» в меню отладчика вашего браузера, чтобы попытаться отследить откуда он исходит.

Затем вам нужно будет сделать запрос на эту страницу и, вероятно, проанализировать ответ JSON.

Изменить: Итак, в основном я собираюсь сделать прыжок здесь и скажите: удачи, но это будет чертовски невозможно поскрести. Во-первых, все динамически генерируется через javascript, во-вторых, они используют akamai (технологию защиты от соскабливания) вместе с отпечатками браузера. По сути, попытка соскоблить что-то вроде продевания иглы через невидимый лабиринт запросов с десятками ключей и параметров. это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...