Как решить JavaScript проблему перенаправления на Python Scrapy? - PullRequest
0 голосов
/ 23 января 2020

Я довольно новичок в scrapy и следующих документах, чтобы собрать информацию о https://pbejobbers.com/abrasives, используя мой скрипт:

import scrapy


class CrwSpider(scrapy.Spider):
    name = "Otim"

    def start_requests(self):
        urls = [
            'https://pbejobbers.com/abrasives'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        pattern = r'document\.location\.href=\"(:?.*)=1\";'
        url = response.css('script::text').re_first(pattern)
        print (url)
        page = response.url.split("/")[-2]
        filename = 'quotes-%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

        next_page = url+'=1'
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

Когда я запускаю сканер, вместо того, чтобы получить реальную страницу, Я получаю это javascript:

<html>
  <body>
    <script type="text/javascript" src="/aes.min.js"></script>
    <script>
      function toNumbers(d) {
        var e = [];
        d.replace(/(..)/g, function(d) {
          e.push(parseInt(d, 16));
        });
        return e;
      }
      function toHex() {
        for (
          var d = [],
            d =
              1 == arguments.length && arguments[0].constructor == Array
                ? arguments[0]
                : arguments,
            e = "",
            f = 0;
          f < d.length;
          f++
        )
          e += (16 > d[f] ? "0" : "") + d[f].toString(16);
        return e.toLowerCase();
      }
      var a = toNumbers("de50860916c188904e9c359aaaf4f248"),
        b = toNumbers("a944ac1efe048739325d92e58868ffa1"),
        c = toNumbers("34d8ed644eb63ddaafeb01607ce6b6ce");
      document.cookie =
        "OCXS=" +
        toHex(slowAES.decrypt(c, 2, a, b)) +
        "; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";
      document.location.href =
        "http://pbejobbers.com/abrasives?81e93addddb02a10cd0652f09370ae96=2";
    </script>
  </body>
</html>

Фактическая страница состоит из списка карточек продуктов. Я заметил, что document.location.href имеет новый URL. Поэтому я взял его с помощью регулярного выражения и попытался передать его сканеру в качестве нового URL-адреса для анализа, но затем я получил тот же результат с =2 конечным URL-адресом. Кажется, я не могу добраться до реальной страницы.

Как я могу получить URL перенаправления и использовать его? Я действительно застрял.

1 Ответ

0 голосов
/ 23 января 2020

Вы не можете go перейти на следующую страницу с помощью Scrapy. Как и при отключении JavaScript из инструментов проверки, кнопка «Далее» перестает работать. Scrapy не может сделать JavaScript. Вы должны использовать Selenium, чтобы очистить эту страницу.

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