Python Amazon使用标头抓取

时间:2019-01-05 17:30:20

标签: python-3.x http-headers

我正在制作一个Python脚本来通过解析页面的HTML从Amazon获取信息。我有以下代码,该代码不起作用:

const sampleObj = { 
  home: true,
  products_edit: true,
  products_create: true,
  orders_delete: true,
  pages_category_create: true
}

const res = Object.keys(sampleObj).reduce((acc,cur)=>{
  const value = sampleObj[cur];
  const tree  = cur.split("_");
  const root  = tree.shift();
  
  if(!acc[root]){
    acc[root] = {};
    if(tree.length === 0){
       acc[root].status = "full"
       return acc;
    } else {
       acc[root].subOptions = {};
       acc[root].status = "limited";
    }
  }
  
  acc[root].subOptions[tree.shift()] = tree.reverse().reduce((acc,cur)=>{
      return {[cur]:acc}
  }, value);
  return acc;
  
}, {});

console.log(res);

此代码引发import requests url = "http://www.amazon.com/" text = requests.get(url) print(text) 。 然后我找到了解决方法here,现在代码如下:

HTTPError: HTTP Error 503: Service Temporarily Unavailable

有效。我知道import requests url = "http://www.amazon.com/" headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'} text = requests.get(url, headers=headers) print(text) 函数的header参数的目的是让Amazon认为HTTP请求来自浏览器。

现在要问我的问题-是否有其他方法可以访问亚马逊而不使用此(看起来像)“肮脏的把戏”?

此外,这样做是“道德的”吗?我一直在考虑将此脚本用于个人用途或将其作为功能集成到Discord机器人中,但是在继续进行之前,我想确保我在这里没有做任何有问题的事情。

先谢谢您。干杯。

1 个答案:

答案 0 :(得分:1)

不,这不道德!

  1. 这就是为什么您必须在标题中提及用户代理的原因。
  2. 在这里您可以阅读,因为他们清楚地提到了Amazon's Conditions of Use

在“附加亚马逊软件条款”标题下对此进行了提及

  

您不得将Amazon软件的任何部分合并到其他程序中,也不得与其他程序一起编译其任何部分,或以其他方式复制(行使本节授予的权利除外),修改,创建衍生产品,分发,全部或部分分配对Amazon软件的任何权利或许可

  1. 但是您可以查看由Amazon Developer Documentation提供的API,它可能对您有帮助!

  2. 另一个原因是这样做会给服务器带来负载,这会使它们付出巨大的代价,而不会带来任何利润。

  3. 如果可以阅读this主题以获取更多查询,您可能还有更多后续问题