我是python的新手。我编写了程序,我使用正则表达式使用命令行参数从网页中提取确切的数字。第一个参数应该是'Amount'第二个应该是'From'第三个应该是'To'。我应该从网站提取确切的数字“{ {3}}“应提取转换后的金额。代码是:
import requests
import re
import sys
amount=sys.argv[1]
from_=sys.argv[2]
to=sys.argv[3]
r = requests.get("http://www.xe.com/ucc/convert/?Amount=%(amount)s&From=%(from_)s&To=%(to)s"%{"amount":amount,"from_":from_,"to":to})
dataCrop=re.findall('[0-9,]+\.[0-9]+',r.text)
if amount<'1':
print dataCrop[15]
else:
print dataCrop[11]
但问题是我不应该使用
的确切位置if amount<'1':
print dataCrop[15]
else:
print dataCrop[11]
而不是我应该修改我的正则表达式。我怎么能为此编写正则表达式?我不能用美味的汤。
答案 0 :(得分:2)
re.search方法返回MatchObject。您可以使用其span方法查找匹配的位置。希望这会有所帮助: - )
答案 1 :(得分:1)
正则表达式匹配的位置在您的情况下不是非常有用的信息。虽然@Raymond Hettinger建议可以通过re.MatchObject
轻松访问它。
您可以将任务分为三个步骤。
import sys
import urllib
if len(sys.argv) != 4:
sys.exit(2)
params = urllib.urlencode(zip("Amount From To".split(), sys.argv[1:]))
url = "http://example.com/path/?" + params
urlencode()
提供sys.argv
的正确编码。
from selenium.webdriver import Firefox as Browser # pip install selenium
browser = Browser()
try:
browser.implicitly_wait(3) # seconds
browser.get(url)
page = browser.page_source
finally:
browser.quit() # quit no matter what
selenium.webdriver
负责使用javascript生成的网页。
import re
print re.findall(r'(\d+.\d+).*?"uniq_class_near_data"', page)
如果页面标记发生变化,它将会中断。
这是用于比较的BeautifulSoup
变体:
from bs4 import BeautifulSoup # pip install beautifulsoup4
soup = BeautifulSoup(page)
print [span.find_previous_sibling(text=re.compile(r'\d+.\d+')).strip()
for span in soup('span', class_="uniq_class_near_data", limit=2)]