硬抓取API
如果您导航到以下网址并选择Search By Country。
然后插入AEfor Holder Country。
如下:
按 后search。然后您会注意到XHR对以下API的调用,这是一个POST请求。
这是它:
正如你可以看到有值了qz,我不能得到它如何才能调用执行API,做分页太多。
有人可能知道如何调用该 API 并进行分页吗?
我达到最好的是JS的功能定位,其处理的参数编码这里
我已经使用代理轮换服务尝试了 selenium,但是在检索一些页面后我被检测到了。
回答
该qz值使用“编码” JSONLZString.compressToBase64
该qi值似乎最初是从qk源 HTML 中获取的,并0-附加在它前面。
var qk = "ooooooooooooooooooo";
// if(!(w == 790 && (h == 600 || h == 590)))
qk = "yj0IAlhpQGl9BLWmmmJ2WMuzofkYFis64bmU5/6mE8w=";
某些请求要求在您提出请求后增加数字。
您还需要另一个答案中给出的 cookie。
回答
您需要生成一个wipo-visitor-uunidas 将它POST作为 cookie 以及一堆其他东西传递给请求。
生成的代码wipo-visitor-uunid是这样的:
(function (){
//generate unique visitor id cookie
if (!Math.imul) Math.imul = function(opA, opB) {
opB |= 0;
var result = (opA & 0x003fffff) * opB;
if (opA & 0xffc00000) result += (opA & 0xffc00000) * opB |0;
return result |0;
};
var _cuunid = 'wipo-visitor-uunid=';
uunid(0);
function uunid(force){
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;
}
}
function cyrb53(str, seed) {
seed = seed || 0;
let h1 = 0xdeadbeef ^ seed, h2 = 0x8badf00d ^ seed;
for (let i = 0, ch; i < str.length; i++) {
ch = str.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ h1>>>16, 2246822507) ^ Math.imul(h2 ^ h2>>>13, 3266489909);
h2 = Math.imul(h2 ^ h2>>>16, 2246822507) ^ Math.imul(h1 ^ h1>>>13, 3266489909);
// return 4294967296 * (2097151 & h2) + (h1>>>0);
return (h2>>>0).toString(16)+(h1>>>0).toString(16);
}
}());
该wipo-visitor-uunid有效期至Jan 2 2034,所以一旦你拥有了它,你应该罚款。
哦,您添加到的字符串POST似乎是查询区域结果,但我不确定它是如何生成的。更多关于这个问题的其他答案。
这是代码,在你的最后测试它:
import json
import requests
query_string = "qz=N4IgLgngDgpiBcIBGAnAhgOwCYgDQgBs0EQYM8QBHASxIAYBaGAOSwAUAO" "AMzAHY0AYgHcAWtQCuADQD2WNAQBeADyRIhCgIIBFLABlpANQIARAEIBNABIQ"
"AVlwCi0gKoBZALwVK4mN4QBGfAB9Ej8/Og46EABfIAAA="
with requests.Session() as s:
the_cookies = s.get("https://www3.wipo.int/branddb/en/").cookies.get_dict()
the_cookies["wipo-visitor-uunid"] = "994c22024f522fd"
s.headers["user-agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
s.headers["X-Requested-With"] = "XMLHttpRequest"
s.headers["Referer"] = "https://www3.wipo.int/branddb/en/"
end_point = f"https://www3.wipo.int/branddb/jsp/select.jsp?{query_string}"
your_precious_data = s.post(end_point, cookies=the_cookies).json()
print(json.dumps(your_precious_data, indent=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 ...