万方数据库,采用了新的数据存储格式,导致一般的requests无法获取到正确的页面。
需要对requests增加新的data,进行post提交。
基本代码如下:
import json
import blackboxprotobuf
import requests
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8;,',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15',
'Content-Type': 'application/grpc-web+proto',
}
url = 'https://s.wanfangdata.com.cn/SearchService.SearchService/search'
deserialize_data = {
"1": [
{
"1": "patent",
"2": keywords,
"5": page_nums,
"6": "2",
"8": "\u0000"
}
]
}
message_type = {'1': {'type': 'message',
'message_typedef': {
'1': {'type': 'bytes', 'name': ''},
'2': {'type': 'bytes', 'name': ''},
'5': {'type': 'int', 'name': ''},
'6': {'type': 'bytes', 'name': ''},
'8': {'type': 'bytes', 'name': ''}},
'name': ''},
'0': {'type': 'bytes', 'name': ''},
'2': {'type': 'bytes', 'name': ''}}
form_data = bytes(blackboxprotobuf.encode_message(deserialize_data, message_type))
bytes_head = bytes([0, 0, 0, 0, len(form_data)])
response = requests.post(url, headers=headers, data=bytes_head+form_data)
具体的代码实现原理:
参考:https://blog.csdn.net/qq_41525018/article/details/125114967