BeautifulSoup дает неожиданные результаты - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в области очистки веб-страниц и, выполнив следующий код, получил неожиданные результаты:

from bs4 import BeautifulSoup as soup
import requests

header = {'User-Agent':'Chrome/71.0.3578.98 Mozilla/64.0'}
url = 'https://www.amazon.in/Philips-Trimmer-Cordless-QT4001-15/dp/B00L8PEEAI'
res = requests.get(url, headers = header)
bs = soup(res.text, 'html.parser')
print(bs.div)

, который дает следующий вывод:

<!-- From remote config v3-->
<script type="text/javascript">
    (function(d) {
        document.createElement("header");

        function b(e) {
            return [].slice.call(e)
        }

        function c(f, e) {
            return {
                m: f,
                a: b(e)
            }
        }
        var a = function(f) {
            var g = {};
            g._sourceName = f;
            g._replay = [];
            g.getNow = function(i, h) {
                return h
            };

            function e(i, h, j) {
                i[j] = function() {
                    g._replay.push(h.concat(c(j, arguments)))
                }
            }
            g.when = function() {
                var i = [c("when", arguments)];
                var h = {};
                e(h, i, "run");
                e(h, i, "declare");
                e(h, i, "publish");
                e(h, i, "build");
                return h
            };
            e(g, [], "declare");
            e(g, [], "build");
            e(g, [], "publish");
            e(g, [], "importEvent");
            a._shims.push(g);
            return g
        };
        a._shims = [];
        if (!d.$Nav) {
            d.$Nav = a("rcx-nav")
        }
        if (!d.$Nav.make) {
            d.$Nav.make = a
        }
    }(window));

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

bs.findAll("div",{"id":"titleSection"})[0].span.text.strip()

, которое, учитывая вышеприведенный вывод, выдает ошибку индекса.Как ни странно, когда я запускаю этот код в цикле для нескольких аналогичных продуктов на Amazon через терминал, он отлично работает для первых 10-15 продуктов, а затем выдает ту же ошибку, а иногда поднимается до 130 элементов, а затем ломается и в других случаях.выдает ошибку на самой первой итерации.Я был бы очень благодарен за объяснение (и, возможно, решение) для этого случайного поведения.

1 Ответ

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

Запросы не могут извлечь страницу с обработанным javascript, поэтому для решения проблемы вы можете выбрать:

  1. Используйте selenium, splash или html-запросы для визуализации javascript;
  2. Используйте запросы и сетевые инструменты браузеров для получения файлов JSON.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...