我有这个脚本,我想用当前日期替换日期2015-05-01
(从和到)。我正在考虑使用 import datetime 之类的东西(我是python的新手):
from StringIO import StringIO
import urllib
import urllib2
url = 'http://fme.discomap.eea.europa.eu/fmedatastreaming/AirQuality/AirQualityUTDExport.fmw'
data = "POSTDATA=FromDate=2015-05-01&ToDate=2015-06-01&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken= "
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
新脚本
from StringIO import StringIO
import urllib
import urllib2
import datetime
i = datetime.datetime.now() // gets the date
url = 'http://fme.discomap.eea.europa.eu/fmedatastreaming/AirQuality/AirQualityUTDExport.fmw'
data = "POSTDATA=FromDate="i&ToDate="i"&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken=" //i replaced the fixed date with the variable i
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
答案 0 :(得分:1)
我并不是说听起来很苛刻,但对语言不熟悉并不是不学习语言语法的借口(恰恰相反)。这一行:
data = "POSTDATA=FromDate="i&ToDate="i"&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken="
显然已经破坏并引发了一个SyntaxError:
bruno@bigb:~/Work/playground$ python
Python 2.7.3 (default, Jun 22 2015, 19:33:41)
>>> data = "POSTDATA=FromDate="i&ToDate="i"&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken="
File "<stdin>", line 1
data = "POSTDATA=FromDate="i&ToDate="i"&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken="
^
SyntaxError: invalid syntax
>>>
在本声明中,rhs表达式实际上以:
开头"POSTDATA=FromDate="
这是一个合法的文字字符串i&ToDate
被解析为“i
”(标识符)“&
”(运营商)“ToDate
”(标识符)仅仅文字字符串和标识符(没有运算符)的并置实际上是非法的:
bruno@bigb:~/Work/playground$ python
Python 2.7.3 (default, Jun 22 2015, 19:33:41)
>>> i = 42
>>> "foo" i
File "<stdin>", line 1
"foo" i
^
SyntaxError: invalid syntax
>>>
显然你想要的是字符串连接,它由add
(“+
”)运算符表示,所以它应该是:
"POSTDATA=FromDate=" + i
然后因为“&amp; ToDate”应该是一个字符串文字,而不是一个操作符和一个变量,你必须引用它:
"POSTDATA=FromDate=" + i + "&ToDate="
然后再次连接当前日期:
"POSTDATA=FromDate=" + i + "&ToDate=" + i + "etc..."
现在在您的代码中i
(不是我将命名日期命名为BTW,但无论如何)是datetime
对象,而不是字符串,所以现在您将获得TypeError
因为你不能将一个字符串与一个字符串连接起来(希望 - 它没有任何意义)。
FWIW这里你想要的不是datetime
对象,而是以“YYYY-MM-DD”格式表示日期的文本(“字符串”)。您可以使用datetime
方法从strftime()
对象获取此内容:
today = datetime.datetime.now().strftime("%Y-%m-%d)
现在你有了一个可以连接的字符串:
data = "POSTDATA=FromDate=" + today + "&ToDate=" + today + "etc..."
这就是说:
requests
是事实上的标准。 答案 1 :(得分:0)
忘记urllib
和urllib2
个库。我建议您使用requests
库。
在这里,使用requests
库解决您的问题:
import requests, datetime
url = 'http://fme.discomap.eea.europa.eu/fmedatastreaming/AirQuality/AirQualityUTDExport.fmw'
i = datetime.datetime.now()
# add as many parameters as you like
payload = {'FromDate': i, 'ToDate': i, 'Pollutant': 'PM10', 'Format': 'XML'}
# here's the magic happens
r = requests.get(url, params=payload)
# status code of response
print r.status_code
# response text
print r.text
答案 2 :(得分:0)
我想将日期2015-05-01(from和to)替换为当前日期
要替换日期,您可以使用字符串格式。发布请求并将响应打印到stdout:
#!/usr/bin/env python2
import urllib2
import sys
from datetime import date
from contextlib import closing
from shutil import copyfileobj
from urllib import quote
url = 'http://fme.discomap.eea.europa.eu/fmedatastreaming/AirQuality/AirQualityUTDExport.fmw'
data = "POSTDATA=FromDate={now}&ToDate={now}".format(now=quote(date.today()))
data += "&Countrycode=&InsertedSinceDate=&UpdatedSinceDate=&Pollutant=PM10&Namespace=&Format=XML&UserToken="
with closing(urllib2.urlopen(url, data)) as response:
copyfileobj(response, sys.stdout)
一般情况下,请考虑urllib.urlencode()
,创建application/x-www-form-urlencoded
数据,而不是手动执行。