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

如何解决Python Scrapy上的JavaScript重定向问题?,python,scrapy,Python,Scrapy,我是相当新的刮和以下文件刮的信息 使用我的脚本: import scrapy class CrwSpider(scrapy.Spider): name = "Otim" def start_requests(self): urls = [ 'https://pbejobbers.com/abrasives' ] for url in urls: yield scrapy.Requ

我是相当新的刮和以下文件刮的信息 使用我的脚本:

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>

函数toNumbers(d){
var e=[];
d、 替换(/(..)/g,功能(d){
e、 push(parseInt(d,16));
});
返回e;
}
函数toHex(){
为了(
变量d=[],
d=
1==参数。长度和参数[0]。构造函数==数组
?参数[0]
:参数,
e=“”,
f=0;
fd[f]?“0”:“)+d[f].toString(16);
返回e.toLowerCase();
}
变量a=t编号(“de50860916c188904e9c359aaaf4f248”),
b=吨数(“a944ac1efe048739325d92e58868ffa1”),
c=吨数(“34d8ed644eb63ddaafeb01607ce6b6ce”);
document.cookie=
“OCXS=”+
toHex(slowAES.decrypt(c,2,a,b))+
“expires=Thu,37年12月31日23:55:55 GMT;path=/”;
document.location.href=
"http://pbejobbers.com/abrasives?81e93addddb02a10cd0652f09370ae96=2";
实际页面由产品卡列表组成。我注意到
document.location.href
有一个新的url。所以我用正则表达式抓取它,并试图将它作为新的URL反馈给爬虫程序进行解析,但随后我得到了与
=2
结束URL相同的结果。我似乎无法进入实际页面


如何获取重定向URL并使用它?我真的被卡住了

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

他们似乎花费了大量精力使网站尽可能难以刮取。我怀疑是否有一种解决方案会变成堆栈溢出答案的格式。