最近在爬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 的一个提示;