Loading

万方Python无法获取页面,爬虫失败的解决方法protobuf

万方数据库,采用了新的数据存储格式,导致一般的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

posted @ 2022-06-14 22:37  王导导  阅读(878)  评论(0编辑  收藏  举报
王导导在拉票!