我是python的初學者,目前正在使用Python開發一個小項目。 我想爲patentview.org的專利研究構建一個動態腳本。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()
我覺得我得到的動態URL正確的開始 - 但似乎編碼給我一個HTTP錯誤400:錯誤的請求。 如果我不編碼,該網址將像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"}}]}]}
對於動態規劃,我不得不拿出所有的庫名。如果還有更好的解決方案,請幫助。
最好的問候。
建議:使用[requests](http://docs.python-requests.org/en/master/)庫而不是用urllib打架 - 它會讓你的生活變得更容易。 –