想吃烧饼 2023-09-10 17:47 采纳率: 100%
浏览 10
已结题

关于#python#的问题:尝试爬一下江西药监局做练习

刚开始学爬虫,尝试爬一下江西药监局做练习,如下是代码:

import json

import requests

if __name__ == '__main__':
    url = 'http://zhjg.mpa.jiangxi.gov.cn/yjlic-search-svr/search/list'
    headers = {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
    }
    data = {
        'pageNumber': '1',
        'pageSize': '10',
        'lictypeid': "CO_PRO_XK",
        'status': "1"
    }
    page_json = requests.post(url = url, headers = headers,data=data).json()
    with open('./yaojian.json','w',encoding='utf-8') as fp:
        json.dump(page_json,fp,ensure_ascii=False)
    print("over!!!")

但结果是:{"code": 500, "msg": "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported", "data": null},不知道如何解决

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-10 20:28
    关注

    【以下回答由 GPT 生成】

    这个问题是因为客户端请求中的Content-Type被服务器拒绝了。根据错误信息,服务器不支持Content-Type为'application/x-www-form-urlencoded;charset=UTF-8'。要解决这个问题,可以尝试以下几种方法:

    1. 使用requests库发送POST请求时,可以将请求数据通过json参数传递,而不是通过data参数传递。修改代码如下:
    import json
    import requests
    
    if __name__ == '__main__':
        url = 'http://zhjg.mpa.jiangxi.gov.cn/yjlic-search-svr/search/list'
        headers = {
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76',
            "Content-Type": "application/json"
        }
        data = {
            'pageNumber': '1',
            'pageSize': '10',
            'lictypeid': "CO_PRO_XK",
            'status': "1"
        }
        page_json = requests.post(url=url, headers=headers, json=data).json()
        with open('./yaojian.json', 'w', encoding='utf-8') as fp:
            json.dump(page_json, fp, ensure_ascii=False)
        print("爬取完成!")
    

    在修改后的代码中,将headers中的Content-Type设置为application/json,并且使用json参数传递请求数据。

    1. 如果第一种方法不起作用,可以尝试手动设置Content-Type为其他类型,例如application/x-www-form-urlencoded。修改代码如下:
    import json
    import requests
    
    if __name__ == '__main__':
        url = 'http://zhjg.mpa.jiangxi.gov.cn/yjlic-search-svr/search/list'
        headers = {
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76',
            "Content-Type": "application/x-www-form-urlencoded"
        }
        data = {
            'pageNumber': '1',
            'pageSize': '10',
            'lictypeid': "CO_PRO_XK",
            'status': "1"
        }
        page_json = requests.post(url=url, headers=headers, data=data).json()
        with open('./yaojian.json', 'w', encoding='utf-8') as fp:
            json.dump(page_json, fp, ensure_ascii=False)
        print("爬取完成!")
    

    在修改后的代码中,将headers中的Content-Type设置为application/x-www-form-urlencoded,并保持data参数不变。

    1. 如果以上方法都无效,说明服务器可能不支持直接通过POST请求提交表单数据。这种情况下,你可以尝试模拟表单提交,将数据以字符串的形式放在POST请求的body中,并且Content-Type设置为application/x-www-form-urlencoded。修改代码如下:
    import json
    import requests
    
    if __name__ == '__main__':
        url = 'http://zhjg.mpa.jiangxi.gov.cn/yjlic-search-svr/search/list'
        headers = {
            "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76',
            "Content-Type": "application/x-www-form-urlencoded"
        }
        data = 'pageNumber=1&pageSize=10&lictypeid=CO_PRO_XK&status=1'
        page_json = requests.post(url=url, headers=headers, data=data.encode('utf-8')).json()
        with open('./yaojian.json', 'w', encoding='utf-8') as fp:
            json.dump(page_json, fp, ensure_ascii=False)
        print("爬取完成!")
    

    在修改后的代码中,将data参数修改为以字符串形式表示的表单数据,并将其编码为utf-8格式。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日
  • 创建了问题 9月10日

悬赏问题

  • ¥15 内网办公电脑进行向日葵
  • ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
  • ¥50 WPF Lidgren.Network.Core2连接问题
  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建