Javascript 硬刮削API

Javascript 硬刮削API,javascript,python,api,beautifulsoup,python-requests,Javascript,Python,Api,Beautifulsoup,Python Requests,如果您导航到以下位置并选择“按国家/地区搜索” 然后为持有人国家/地区插入AE 详情如下: 按搜索后。然后,您将注意到对以下内容的XHR调用,这是一个POST请求 给你: 正如您所看到的,qz有其价值,我无法理解它是如何实现的,以便调用API并进行分页 可能有人有关于如何调用该API并进行分页的线索吗 我得到的最好结果是处理参数编码的JS函数位置 我已经使用代理轮换服务尝试了selenium,但在检索了一些页面后被检测到。您需要生成一个wipo访客uunid,并将其作为cookie和一堆其他

如果您导航到以下位置并选择“按国家/地区搜索”

然后为
持有人国家/地区插入
AE

详情如下:

搜索后
。然后,您将注意到对以下内容的
XHR
调用,这是一个
POST
请求

给你:

正如您所看到的,
qz
有其价值,我无法理解它是如何实现的,以便调用
API
并进行分页

可能有人有关于如何调用该API并进行分页的线索吗

我得到的最好结果是处理参数编码的JS函数位置


我已经使用代理轮换服务尝试了selenium,但在检索了一些页面后被检测到。

您需要生成一个
wipo访客uunid
,并将其作为cookie和一堆其他内容传递给
POST
请求

生成wipo访客uunid的代码如下:

(函数(){
//生成唯一访客id cookie
如果(!Math.imul)Math.imul=函数(opA,opB){
opB |=0;
var结果=(opA和0x003fffff)*opB;
如果(opA&0xffc00000)结果+=(opA&0xffc00000)*opB | 0;
返回结果| 0;
};
var_cuunid='wipo访客uunid=';
uunid(0);
功能uunid(部队){
if(force | | document.cookie.indexOf(_cuunid)=-1){
var value=navigator.userAgent+Date.now()+Math.random().toString().substring(2,11);
var cookie=_cuunid+cyrb53(value)+';expires=Jan 2 2034 00:00:00;path=/;SameSite=Lax;domain=.wipo.int';
document.cookie=cookie;
} 
}
cyrb53(str,seed)功能{
种子=种子| | 0;
设h1=0xdeadbeef^种子,h2=0x8badf00d^种子;
for(设i=0,ch;i>16246822507)^Math.imul(h2^h2>>13266489909);
h2=Math.imul(h2^h2>>16246822507)^Math.imul(h1^h1>>13266489909);
//返回4294967296*(2097151&h2)+(h1>>>0);
返回(h2>>>0).toString(16)+(h1>>>0).toString(16);
}
}());
wipo访客uunid
有效期至2034年1月2日

哦,您添加到
POST
的字符串似乎是查询区域结果,但我不确定它是如何生成的。在这个问题的其他答案中有更多关于这一点的内容

以下是代码,请在您的终端进行测试:

导入json
导入请求
query_string=“qz=N4IgLgngDgpiBcIBGAnAhgOwCYgDQgBs0EQYM8QBHASxIAYBaGAOSwAUAO”\“AMZAHY0AYGHCAWTQCUADQD2WNAQBEADYRIHCGIIBBLPANQIARAEIBNABIQ”\
“AVlwCi0gKoBZALwVK4mN4QBGfAB9Ej8/Og46EABfIAAA=”
将requests.Session()作为s:
_cookies=s.get(“https://www3.wipo.int/branddb/en/)cookies.get_dict()
_cookies[“wipo访客uunid”]=“994c22024f522fd”
s、 标题[“用户代理”]=“Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/89.0.4389.90 Safari/537.36”
s、 标题[“X-request-With”]=“XMLHttpRequest”
s、 标题[“引用者”]=“https://www3.wipo.int/branddb/en/"
终点=f“https://www3.wipo.int/branddb/jsp/select.jsp?{query_string}”
您的\u宝贵的\u数据=s.post(端点,cookies=the\u cookies).json()
打印(json.dumps(您的数据,缩进=2))
这将返回如下输出:

{
  "lastUpdated": 1616081900884,
  "sv": "www3.wipo.int",
  "response": {
    "docs": [
      {
        "OO": "NZ",
        "score": 1,
        "STATUS": "PEND",
        "MTY": [
          "Word"
        ],
        "AD": "2021-03-17T23:59:59Z",
        "HOL": [
          "PONSONBY DOGS LIMITED"
        ],
        "NC": [
          43
        ],
        "SOURCE": "NZTM",
        "DOC": "36/03/1173603_20210317.1919.xml.gz",
        "ID": "NZTM.1173603",
        "BRAND": [
          "Good Dog"
        ],
        "HOLC": [
          "NZ"
        ]
      },
and much, much more data ...

qz
值是使用
LZString.compressToBase64“编码”的JSON

qi
值似乎最初取自源HTML中的
qk
,前面加了
0-

var qk = "ooooooooooooooooooo";

// if(!(w == 790 && (h == 600 || h == 590))) 

qk = "yj0IAlhpQGl9BLWmmmJ2WMuzofkYFis64bmU5/6mE8w=";
某些请求要求在您发出请求后增加数字


您还需要其他答案中给出的cookie。

感谢您提供的答案。
qz
值实际上是一个动态值,在分页过程中发生了更改,甚至应该向
API
验证您要查找的国家/地区。用另一种声音。如何为
AE
对API进行分页?仅供读者使用。这个答案只是对API的一个全球调用,在API中,没有问题中描述的按国家对过滤器的控制,甚至没有对分页方法的控制。你是一个真正的传奇,这个答案值得一万亿美元的感谢:)谢谢,你今天学到了一些非常好的东西。做得好,@Karl.qk从
“ooooooooooo”开始是怎样的
“yj0IAlhpQGl9BLWmmmJ2WMuzofkYFis64bmU5/6mE8w=“
请?我想这也是艾哈迈德所问的?@QHarr它在源代码中-不确定他们为什么用一个伪值初始化它-但是“真实”值在两行之后被设置。referer
头是错误的,
Accept
头缺失。不过,这不是一个“公共API”——它们明确表示不允许进行web抓取——因此您所尝试的是不可能的。