如何解决Python Scrapy上的JavaScript重定向问题?

2024-06-12 20:52:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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并使用它?我真的被卡住了


Tags: selfcomurlparseresponsepagescriptlocation
1条回答
网友
1楼 · 发布于 2024-06-12 20:52:34

您不能使用Scrapy转到下一页。当您从检查工具中禁用JavaScript时,“下一步”按钮停止工作。Scrapy无法呈现JavaScript。您必须使用Selenium来刮取此页面

相关问题 更多 >