私はPythonの初心者で、現在はPythonで小さなプロジェクトに取り組んでいます。 私はpatentsview.orgの特許研究のためのダイナミックなスクリプトを作りたいと思っています。私は、動的URLのために右のスタートを切っ考えるPatentsview API Python 3.4
import urllib.parse
import urllib.request
#http://www.patentsview.org/api/patents/query?q={"_and":
[{"inventor_last_name":author},{"_text_any":{"patent_title":[title]}}]}&o=
{"matched_subentities_only": "true"}
author = "Jobs"
andreq = "_and"
invln = "inventor_last_name"
text = "_text_any"
patent = "patent_title"
match = "matched_subentities_only"
true = "true"
title = "computer"
urlbasic = "http://www.patentsview.org/api/patents/query"
patentall = {patent:title}
textall = {text:patentall}
invall = {invln:author}
andall = invall.copy()
andall.update(textall)
valuesq = {andreq:andall}
valuesqand = {andreq:andall}
valuesq = {andreq:valuesqand}
valueso = {match:true}
#########
url = "http://www.patentsview.org/api/patents/query"
values = {"q":valuesq,
"o":valueso}
print(values)
data = urllib.parse.urlencode(values)
print(data)
############
data = data.encode("UTF-8")
print(data)
req = urllib.request.Request(url,data)
resp = urllib.request.urlopen(req)
respData = resp.read()
saveFile = open("patents.txt", "w")
saveFile.write(str(respData))
saveFile.close()
- しかし、エンコーディングは私にHTTPエラー400与えるようだ:
は、ここに私のコードで不正なリクエストを。 エンコードしないと、URLはwww.somethingsomething.org/o:{....}のようになり、明らかにエラーが発生します。ここで はエラーです:私はエンコードした場合、すべてのブラケットが変換され得るので、
Traceback (most recent call last):
File "C:/Users/Max/PycharmProjects/KlayerValter/testen.py", line 38, in
<module>
resp = urllib.request.urlopen(req)
File "C:\Python34\lib\urllib\request.py", line 161, in urlopen
return opener.open(url, data, timeout)
File "C:\Python34\lib\urllib\request.py", line 469, in open
response = meth(req, response)
File "C:\Python34\lib\urllib\request.py", line 579, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python34\lib\urllib\request.py", line 507, in error
return self._call_chain(*args)
File "C:\Python34\lib\urllib\request.py", line 441, in _call_chain
result = func(*args)
File "C:\Python34\lib\urllib\request.py", line 587, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
Process finished with exit code 1
、私は同じエラーを取得します。 次のようにpatentsviewのAPIが動作します。私はすべてのライブラリ名を考え出す必要があった動的なプログラミングのための
http://www.patentsview.org/api/patents/query?q={"_or":[{"_and":
[{"inventor_last_name":"Whitney"},{"_text_phrase":{"patent_title":"cotton
gin"}}]},{"_and":[{"inventor_last_name":"Hopper"},{"_text_all":
{"patent_title":"COBOL"}}]}]}
。より良い解決策がある場合は、助けてください。
よろしくお願いいたします。
提案:urllibと戦うのではなく[要求](http://docs.python-requests.org/ja/master/)ライブラリを使用してください。あなたの人生を楽にします。 –