zoukankan      html  css  js  c++  java
  • python 3 关于requests库的 text / content /json

    最近在爬SDFDA的数据,刚开始用urllib.request 库,一直连不到数据 ;

    后来通过CHROME浏览器的F12,发现该 网站用的是JSON格式{}'Content-Type': 'application/json',},不同于以往的提交方式“Content-Type: text/html; charset=utf-8"

    试了各种方法 ,一直不能取得数据。

    看的许多介绍方法中有用“requests”库的,一试果然简单方便,可以直接发送JSON格式的数据参数;下载安装后,导入“import resquest”

    很快以往的问题得到解决,能将想要页面内容读取出来,但显示的是u9882十六进制的编码,没有办法继续“百度”,

    发现了requests库中的,content 属性和JSON属性,一试果然见效;

    查了下资料:

    resp.text返回的是Unicode型的数据。 
    resp.content返回的是bytes型的数据。 
    也就是说,如果你想取文本,可以通过r.text。 
    如果想取图片,文件,则可以通过r.content。 
    (resp.json()返回的是json格式数据)

    #-*- coding:utf-8 -*- 
    #读取山东FDA的药品GSP认证经营企业数据
    # 20161128 zhangshaohua
    import re
    import requests
    import json
    
    
    
    #读取首页
    url = 'http://124.128.39.251:9080/sdfdaout/jsp/datasearch/searchinfolist.jsp?pageSize=10&entType=drugGSP&thisPage=1'
    url = 'http://124.128.39.251:9080/sdfdaout/jsp/datasearch/searchinfolist.jsp?pageSize=10&thisPage=2&entType=drugGSP'
    #url = 'http://124.128.39.251:9080/sdfdaout/jsp/datasearch/searchinfolist.jsp?pageSize=10&thisPage=12&entType=drugGSP'
    #取总记录数,每页20条#zjls = getContent(url,'共(d{1,5})页','UTF-8')
    headers = {
    'Host': '124.128.39.251:9080',
    'Proxy-Connection': 'keep-alive',
    'Content-Length': '256',
    'Origin': 'http://124.128.39.251:9080',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    'Content-Type': 'application/json',
    'Accept': '*/*',
    'Referer': 'http://124.128.39.251:9080/sdfdaout/jsp/datasearch/searchinfolist.jsp',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    
    }
    
    url = 'http://124.128.39.251:9080/sdfdaout/command/ajax/com.lc.datasearch.cmd.SearchInfoQueryCmd'
    parms = {"params":{"javaClass":"org.loushang.next.data.ParameterSet","map":{"limit":10,"start":10,"entType":"drugGSP","defaultSort":{"javaClass":"ArrayList","list":[]},"dir":"ASC","needTotal":True},"length":7},"context":{"javaClass":"HashMap","map":{},"length":0}}
    values = json.dumps(parms)
    req = requests.post(url,data=values,headers=headers)
    content = req.json()
    
    print(content)
    
    print(type(content))
    
    
    print('药品零售企业读取完成!')
    

      学习路上的坑还没有完。

    一直在PYTHON 客户端中试的好好的,一到CMD执行程序就变成了以上的提示;认真对比了两边的代发现:

    content = req.json 和 

    content = req.json()

    带()返回的是JSON的数据,req.json 只返回类型为method 的一个提示;

  • 相关阅读:
    【转】教你爱上Blocks(闭包)
    【转】iOS Developer:真机测试
    bzoj1231 混乱的奶牛
    bzoj2064 分裂
    洛谷P2051 中国象棋
    洛谷P2607 骑士
    洛谷P1879 玉米田
    洛谷P3694 邦邦的大合唱
    openjudge dp水题记录
    bzoj1191 超级英雄
  • 原文地址:https://www.cnblogs.com/lrzy/p/6116482.html
Copyright © 2011-2022 走看看